【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

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

posted @ 2023-02-07 11:07  ninarMing  阅读(149)  评论(0编辑  收藏  举报