【Appium_python】启动app,出现多次打开关闭导致失败问题,driver用单例模式(_new_)进行解决。
运用多设备,启动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_)进行解决。的更多相关文章
- 使用VS开发的一个开机自启动启动、可接收指定数据关闭电脑或打开其他程序
使用VS开发的一个开机自启动启动.可接收指定数据关闭电脑或打开其他程序需要注意的几点 为了能够在其他电脑上运行自己写的程序,需要在VS改一下编译的运行库.(项目->属性->配置属性-> ...
- Appium学习路—脚本篇(启动app)
启动之前的准备 1.脚本执行前,需要先启动appium的server端, 启动server方法: 打开appium客户端,点击右上角的Launch 2.iOS的测试只能在mac本上做 ...
- android窗体动画:activity启动从底部向上滑动出现,关闭的时候从顶部向下滑动消失的动画实现
在IOS系统里,我们打开app都是有启动动画的,这样子在打开一个新窗体,用户感觉有个过渡动画,体验效果很好,不会觉得很突然就冒出一个窗体,下面就实现一个android 的activity启动和关闭动画 ...
- appium+Python 启动app(一)
当我们appium和Python环境都配置好了,如何启动我们第一个app呢?下面介绍appium+Python启动app的操作步骤,为了能够详细查看,我们这里使用夜游神模拟器进行示范. 测试项目:QQ ...
- CentOS7使用firewalld打开关闭防火墙与端口(转载)
1.firewalld的基本使用 启动: systemctl start firewalld 查看状态: systemctl status firewalld 停止: systemctl disabl ...
- [Android]从Launcher开始启动App流程源码分析
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5017056.html 从Launcher开始启动App流程源码 ...
- Android Launcher分析和修改9——Launcher启动APP流程
本来想分析AppsCustomizePagedView类,不过今天突然接到一个临时任务.客户反馈说机器界面的图标很难点击启动程序,经常点击了没有反应,Boss说要优先解决这问题.没办法,只能看看是怎么 ...
- 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里边的 ...
- 【解决】应用程序无法正常启动(0xc000007b)。请单击“确定”关闭应用程序。
换了SSD硬盘,装了Windows 7 SP1 x64的系统.用了一段时间,突然一天有些软件打不开了.弹出下面的提示 应用程序无法正常启动(0xc000007b).请单击“确定”关闭应用程序.第一时间 ...
- ele.me在IOS浏览器端启动APP的技巧分析
ele.me在IOS浏览器端启动APP的技巧分析 巧妙利用后台重定向,在schemes启动时提示用户打开,启动不了APP时能够及时跳转至下载页面. 避免报错页面的出现以及用户还没来的及选择就跳转到下载 ...
随机推荐
- kubeadm安装
目录: 环境准备 所有节点安装docker 部署K8s集群 部署Dashboard 安装Harbor私有仓库 安装 master(2C/4G,cpu核心数要求大于2) 192.168.63.100 d ...
- T14 风扇狂转修整TPFanControl.ini 屏蔽pwr
//注意标红部份屏蔽pwr //NEW: Set UseTWR=1 to see more sensors, will work only on newer T4xx// ATTENTION: if ...
- springdata(jpa)的基础使用
jpa与mybatis-plus类似,都属于数据库相关的框架 jpa需要扫描,这里在启动类指定路径 jpa的实体类需要绑定@Entity, 与mysql表映射@Table(@name="数据 ...
- MySQL时区的问题
我这里是在application.properties文件中配置的MySQL连接信息. 开始时间显示不征程是因为没有配置时区,后来加上了setTimeZone=Asia/Shanghai,时间显示正常 ...
- 更改ubuntu分辨率
显示器是1920*1080的,ubuntu20里没有,查了一通,修改成功,过程如下: 1.打开终端,输入xrandr, 我用的虚拟机,记下Virtual1 connected primary 1920 ...
- 清空kafka全部数据
1.停止机器上的kafka,停止业务系统 docker容器执行命令: docker stop 容器名称 2.删除kafka存储目录(server.properties文件log.dirs配置,默认为& ...
- JSP课设:学生选课系统(附源码+调试)
JSP学生选课管理系统学生选课管理系统功能概述(1)登录模块分为两种角色:学生角色.教师角色 (2)教师模块:选课管理功能为对课程信息(课程编号.名称.学分)进行添加.修改.删除操作:学生信息功能对学 ...
- 安装labelme的流程
- logrotate配置记录
对于一些比较频繁又没有太大意义的log,可以设定出更严格的切割策略 see https://blog.csdn.net/liuxiao723846/article/details/100120058 ...
- Linux基本概念
目录 1. 内核.内核态和用户态 2. 用户和组 3. 文件和文件系统 4. I/O模型 5. 程序.进程.线程和协程 6. shell.终端和会话 1. 内核.内核态和用户态 内核是指管理和分配 ...