运用多设备,启动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. Linux中 cat查询文件指定内容-并输入到指定文件内

    常用: ① cat xxx.log | grep -C 20 "查询关键字" ② grep -E '1805|1905' CloudPayment.log > out.log ...

  2. Java包机制 与Javados 命令

    package: 定义包 import  : 导入包 com.wang.test.* :点* 是导入当前包下的所有类 @author  :注释作者名 @version :注释版本号 @since    ...

  3. 遇到端口占用无法启动IIS Express服务器

    报错图片: 上图所述由于端口被占用无法完成IIS Express的输出 这时候要考虑到自己在Windows的IIS 是不是配置了该端口? 很明显,就是配置了一个8091的端口且还在启动中,这时候要先将 ...

  4. 操作系统实战45讲笔记- 07 Cache与内存:程序放在哪儿?

    程序局部性原理: CPU 大多数时间在执行相同的指令或者与此相邻的指令 时间局部性VS空间局部性: a. 时间局部性:当前访问的指令或数据,也可能在之后访问: b. 空间局部性:当程序访问内存地址x时 ...

  5. centos7上搭建Jenkins环境

    选择在centos 上安装jdk和tomcat来搭建Jenkins 1.jdk安装 查看有没有java环境:rpm -qa | grep java 如果没有java环境的话,接着就去查找java-1. ...

  6. 生产环境自动备份win服务器所有web项目(IIS+项目代码)

    @echo offrem 功能:每月自动备份本服务器所有web项目rem 日期:2022.3.10rem 制作人:zl rem 定义变量Y为备份时间:YYYYMMset y=%date:~0,4%%d ...

  7. Fiddler 教程【转】

    作者: 小坦克  来源: 博客园  发布时间: 2012-07-07 14:20  阅读: 71973 次  推荐: 45   原文链接   [收藏]  阅读目录 Fiddler的基本介绍 Fiddl ...

  8. linux:day01 计算机基础 随堂笔记 马

    本课程内容目录(前30天) 一,计算机基础 1,机械硬盘是比较慢的,如果有条件的话,还是换成固态硬盘有个120G就够了,价钱大概500G 700元 2,视频从一台机器拷贝到另外一台机器,复制的时候要限 ...

  9. Demo of canvas, canvas optimization and svg

    It used the canvas to draw the curves in the old project, and the client felt that it was vague, so ...

  10. 百度云+Zotero进行知识管理的方法

    首先,要在zotero的首选项的文件与文件夹里去自定义你的zotero文件夹,这个文件夹就是你的zotero软件的文档存储编辑的文件夹,本来默认是在电脑用户里自动创建的,比如hp/user/zoter ...