在之前的脚本中,我们都把构造driver实例对象的数据(即Desired Capabilities)写在业务代码中,如下所示:
(以下所有内容使用PageObject模式,以微博 V10.12.0做为例子,)
def start(self):
caps = {"platformName": "Android",
"deviceName": "U4AIUKFAL7W4MJLR",
"platforVersion": "9",
"appPackage": "com.sina.weibo",
"appActivity": "com.sina.weibo.SplashActivity",
"autoGrantPermissions": "true",
"automationName": "UiAutomator2"
"noReset": True
}
self.driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
将数据写在业务代码中,如果换手机后需要修改代码,这样对于项目的维护是比较不方便的,所以将这些配置信息专门写在配置文件中,方便调用和修改。
可以将desired_caps文件存在再config文件夹中,如下:
desired_caps.yaml文件中的Capabilities数据如下:
platformName: Android
platformVersion: '9'
deviceName: U4AIUKFAL7W4MJLR
appActivity: com.sina.weibo.SplashActivity
appPackage: com.sina.weibo
automationName: UiAutomator2
autoGrantPermissions: true
noReset: true
url: 127.0.0.1(这里如果使用localhost会报错)
port: 4723
读取desired_caps.yaml文件,构造driver的函数:
class AppStart:
def app_start(self):
# 从desired_caps.yaml读取driver配置数据
caps = open(r"E:\\study\\Fork\\WeiboDemo\\Weibo\\config\\desired_caps.yaml", 'r')
data = yaml.load(caps, Loader=yaml.FullLoader)
desired_caps = {'platformName': data['platformName'],
'platformVersion': data['platformVersion'],
'deviceName': data['deviceName'],
'appPackage': data['appPackage'],
'appActivity': data['appActivity'],
'automationName': data['automationName'],
'autoGrantPermissions': data['autoGrantPermissions'],
'noReset': data['noReset']}
self.driver = webdriver.Remote('http://' + str(data['url']) + ':' + str(data['port']) + '/wd/hub', desired_caps)
self.driver.implicitly_wait(10)
return LoginPage(self.driver)