运用多设备,启动app多次出现打开又关闭问题,查看后是多次对driver进行实例化,就用单例的模式进行解决。

单例模式(Singleton Pattern)目的就是保证一个类仅有一个实例,每一次执行类名返回的对象,内存地址是相同的。

根据编写的代码特点就使用_new_方法实现

from appium import webdriver
from util.write_user_command import WriteUserCommand class Singleton(object):
driver = None def __new__(cls, i, *args, **kwargs):
if not hasattr(cls, '_instance'):
orig = super(Singleton, cls)
write_file = WriteUserCommand()
devices = write_file.get_value('user_info_' + str(i), 'deviceName')
port = write_file.get_value('user_info_' + str(i), 'port')
desired_caps = dict()
desired_caps['platformName'] = 'Android'
desired_caps['automationName'] = 'UiAutomator2'
# 接受中文输入
# desired_caps['unicodeKeyboard'] = True
# desired_caps['resetKeyboard'] = True
desired_caps['noReset'] = True
desired_caps['deviceName'] = devices
desired_caps['app'] = 'D:\\Projects\\PycharmProjects\\plum\\apk\\xxxtV5.2.7.4_release.apk'
desired_caps['appPackage'] = 'xx_package_name'
# desired_caps['appWaitActivity'] = ''等到某个activity才去执行
desired_caps['appActivity'] = '.xxxappActivity.WelcomeActivity'
cls._instance = orig.__new__(cls, *args, **kwargs)
cls._instance.driver = webdriver.Remote("http://127.0.0.1:" + str(port) + "/wd/hub", desired_caps) return cls._instance def __init__(self, i, *args, **kwargs):
self.i = i class BaseDriver(Singleton):
def get_driver(self):
return self.driver if __name__ == '__main__':
# driver = BaseDriver().get_driver()
# appium -p 4725 -bp 4701 -U 127.0.0.1:21503(devices_name)
pass

大致就是这样,涉及到别的从别的配置文件读取多设备的配置信息就不介绍了。

【Appium_python】启动app,出现多次打开关闭导致失败问题,driver用单例模式(_new_)进行解决。的更多相关文章

  1. 使用VS开发的一个开机自启动启动、可接收指定数据关闭电脑或打开其他程序

    使用VS开发的一个开机自启动启动.可接收指定数据关闭电脑或打开其他程序需要注意的几点 为了能够在其他电脑上运行自己写的程序,需要在VS改一下编译的运行库.(项目->属性->配置属性-> ...

  2. Appium学习路—脚本篇(启动app)

    启动之前的准备   1.脚本执行前,需要先启动appium的server端, 启动server方法: 打开appium客户端,点击右上角的Launch     2.iOS的测试只能在mac本上做   ...

  3. android窗体动画:activity启动从底部向上滑动出现,关闭的时候从顶部向下滑动消失的动画实现

    在IOS系统里,我们打开app都是有启动动画的,这样子在打开一个新窗体,用户感觉有个过渡动画,体验效果很好,不会觉得很突然就冒出一个窗体,下面就实现一个android 的activity启动和关闭动画 ...

  4. appium+Python 启动app(一)

    当我们appium和Python环境都配置好了,如何启动我们第一个app呢?下面介绍appium+Python启动app的操作步骤,为了能够详细查看,我们这里使用夜游神模拟器进行示范. 测试项目:QQ ...

  5. CentOS7使用firewalld打开关闭防火墙与端口(转载)

    1.firewalld的基本使用 启动: systemctl start firewalld 查看状态: systemctl status firewalld 停止: systemctl disabl ...

  6. [Android]从Launcher开始启动App流程源码分析

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5017056.html 从Launcher开始启动App流程源码 ...

  7. Android Launcher分析和修改9——Launcher启动APP流程

    本来想分析AppsCustomizePagedView类,不过今天突然接到一个临时任务.客户反馈说机器界面的图标很难点击启动程序,经常点击了没有反应,Boss说要优先解决这问题.没办法,只能看看是怎么 ...

  8. cordova在app内部指定浏览器打开链接插件:cordova-plugin-inappbrowser

    原文网址:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/cordova-plugin-inappbrowser/ 要想App里边的 ...

  9. 【解决】应用程序无法正常启动(0xc000007b)。请单击“确定”关闭应用程序。

    换了SSD硬盘,装了Windows 7 SP1 x64的系统.用了一段时间,突然一天有些软件打不开了.弹出下面的提示 应用程序无法正常启动(0xc000007b).请单击“确定”关闭应用程序.第一时间 ...

  10. ele.me在IOS浏览器端启动APP的技巧分析

    ele.me在IOS浏览器端启动APP的技巧分析 巧妙利用后台重定向,在schemes启动时提示用户打开,启动不了APP时能够及时跳转至下载页面. 避免报错页面的出现以及用户还没来的及选择就跳转到下载 ...

随机推荐

  1. python3 - Django3.2框架

    提示:web开发已有php.java,而python在这方面,没有优势,python的优势在于:爬虫.人工智能.大数据分析等,python在web开发这方面,没必要掌握:版本:稳定版本:3.2(py3 ...

  2. android root app 无法umount

    app已经有root权限了. 在执行umount /sbin时候总是不成功,但是在adb 的shell 里是可以的. 研究半天后发现,原来app的mount 空间被修改了. 用以下方法解决问. ech ...

  3. 主线程 子线程 调用 ThreadId BeginInvoke调用和Invoke调用

    BeginInvoke是异步线程执行 class Program    {        static int TakeWhile() {            int threadid = Thre ...

  4. 脚本执行sudo命令时: 免手动确认和免输入密码

    1.sudo 命令有时候需要手动输入yes来确认执行 或者 软件在安装包下载完毕后还需要你输入y进行确认安装 .那如果是用脚本执行sudo 命令就可以用-y 参数来确认执行 sudo yum inst ...

  5. 小程序使用webview嵌套H5两边如何传参.

    需求:项目里面需要进行人脸核身.需要调起小程序的人脸核身功能.需要h5跳转到小程序页面.验证完后回退 1.h5页面先引入一个js文件 2.当用微信小程序的web-view内嵌H5页面的时候,H5页面的 ...

  6. SICP 笔记:环境配置

    SICP 笔记:环境配置 记录学习<算机的程序的构造和解释>的笔记. 环境配置 SICP 里面使用的语言是一种 Lisp 的变体 Scheme. 使用 DrRacket 作为 IDE 来进 ...

  7. Github搜索优质项目方法

    [转载]:https://www.zhihu.com/question/20084458 搜索结果会显示非常多的开源项目,简直让你应接不暇,无从下手,很多小伙伴搜到这一步就放弃了,因为项目太多了,根本 ...

  8. 说说Selenium的几个痛处

    Selenium挺好用,但也有几个不爽的地方: 1. 元素无法点击,因为scroll to element这一招时常不管用 2. 调试慢,一进入调试模式,PyCharm突然变慢, evaluate如同 ...

  9. lineHeight 和fontSize的区别

    参考资料:https://blog.csdn.net/WuLex/article/details/94667136 暂时记录,待测试确认. lineHeight包含了行间距,而fontSize只是字体 ...

  10. Ubuntu: 升级或安装最新版本的 Nginx

    Ubuntu 默认 apt 源中的 Nginx 版本比较旧,今天介绍下如何在 Ubuntu 中安装最新版本的 Nginx. 要安装较新版本的 Nginx, 可以使用 Nginx 的 APT 源.执行如 ...