测试环境:
安卓,python+appium
问题描述如下:
我的 py 文件中目前有 5 个测试用例,功能分别如下:
用例 1、完成卸载 app 操作;
用例 2、完成 app 的安装操作;
用例 3、在用例 2 的基础上,app 启动后界面是登录界面,判断这个登录界面上是否存在一个 powerer-by 信息;
用例 4、是个登录操作,在登录界面上输入 username/password 进行登录操作;
用例 5、在用例 4 的基础上,登录进去后,判断 app 的侧边栏是否有 powered-by 信息
用例 1、用例 2,activity 使用的是 com.xxx.ui.FlowPager
用例 3、用例 4,activity 使用的是 com.xxx.ui.LoginPager
用例 5,activity 使用的是 com.xxx.ui.MainPager
这 5 个用例,使用 3 个不同的 activity,而在函数 get_desired_capabilities 中初始化的 appActivity 是 com.xxx.ui.FlowPager;
也就是说,我在 desired_caps 中设置了 activity,一些用例执行通过了,执行其他用例的时候,需要别的 activity 了,也就是前 2 个用例执行可成功;后面的用例执行就失败了。
如果我把 get_desired_capabilities 函数中 appActivity 修改为用例 3~4 需要的 activity,保留用例 3 和 4,其他用例注释掉,则用例 3 和 4 执行是 OK 的。
用例 setup 和 teardown 代码如下;
def setUp(self):
# 启动所有的测试桩
StubFactory().start()
#初始化driver
self.driver = getDriverInfo().androidDriverInfo()
logging.info("\n============= Begin to test [ " + self.getDoc() + " ] ===============\n")
def tearDown(self):
# 停止所有的测试桩
StubFactory().stop()
self.driver.quit()
logging.info("\n============= End to test [ " + self.getDoc() + " ] ===============\n")
driver 信息的获取,使用另外一个类,代码片段如下:
def get_desired_capabilities(app):
desired_caps = {
'platformName': 'Android',
'platformVersion': '4.3',
'deviceName': 'Android Emulator',
'appPackage' : 'com.xxx.phone',
'appActivity' : 'com.xxx.ui.FlowPager',
'app': PATH(r'../testApp/' + app)
}
,
return desired_caps
测试用例 3 的代码如下:
def testOutPowerby(self):
''' 安卓 --> 登录界面上是否有powerBy测试 '''
driver = self.driver
#点击掉拒绝,以展示UI中的resource-id
try:
title = driver.find_element_by_id("com.xxx.phone:id/alert_btn_2x")
title.click()
except NoSuchElementException as e:
print e.message
#校验app的登录界面上是否有powered-by信息
logging.info(' 开始检测app的登录界面上是否有powered-by信息 ... \n')
expect = True
result = driver.find_element_by_id('com.xxx.phone:id/powered_by').is_displayed()
self.assertEqual(expect, result, '\n app的登录界面上不存在powered-by信息! \n')
该用例执行报错:
WebDriverException: Message: u'A new session could not be created. (Original error: com.xxx.phone/com.xxx.ui.FlowPager never started. Current: com.xxx.phone/com.xxx.ui.LoginPager)'
日志里报错,是说 com.xxx.ui.FlowPager 没启动,而当前启动的则是 com.xxx.ui.LoginPager,是要每次根据用例,去合理的修改 appActivity 的值吗?该怎么修改才能确保用例能够在不同界面间连贯去执行呢?
请问大家在实际使用中遇到这个情况是如何解决的呢?