运用多设备,启动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,driver,caps,desired,单例,new,cls From: https://www.cnblogs.com/ninarming/p/17097728.html