目前刚开始学习 appium,遇到这个问题,请教各位大神,求指导~
之前为了跑多个 case 之间不清除程序的缓存数据,想要节省点时间,参考了这篇文章,http://testerhome.com/topics/2616
就是在启动 appium 的时候加个参数--no-reset,目前却出现了 activity never started 的问题
简单查询了下发现
出现这种情况是因为 launch appActivity 在启动 app 之后无法找到,而目前是另一个 activity,所以提示找不到
解决办法:
在 capabilities 里多添加一个参数 appWaitActivity
desired_caps['appActivity'] = 'com.XXX.main.guide.SplashScreenActivity'
desired_caps['appWaitActivity'] = 'com.XXX.main.guide.MainActivity'
但是我发现要测的 App,它按首次和非首次,启动的 activity 的逻辑是不一样的。
例如:首次启动
先是快速的闪屏-》自动到新用户引导页 -》自动到城市选择页(需选某个城市)-》跳到首屏
SplashScreenActivity -》GuidanceNewComerActivity -》CityListSwitchActivity -》MainActivity
例如:非首次启动,即已经选择过城市了
先是快速的闪屏-》跳到首屏
SplashScreenActivity -》MainActivity
我的 case,针对这两种情况也进行了判断,代码逻辑应该是 OK 的
我的 python main 函数如下,会先卸载程序,再启动 appium 执行 case
if __name__ == '__main__':
subprocess.Popen("adb uninstall com.XXX.v1", shell = True)
time.sleep(2)
appiumServer = subprocess.Popen("appium --no-reset --log-level error:error", shell=True)
time.sleep(3)
suite = unittest.TestLoader().loadTestsFromTestCase(NearbyShopListTest)
result = unittest.TextTestRunner(verbosity=2).run(suite)
os.system("ps -ef | grep appium |"
" awk '{print $2}' |xargs kill {} 2>/dev/null")
if not result.wasSuccessful():
exit(1)
目前的问题:
1.未加'appWaitActivity’ 时,case1 是首次启动执行结果 OK,因为加了 no-reset 参数未清除函数,到了 case2 后,App 启动直接到首页,就出现如下的报错
WebDriverException: Message: A new session could not be created. (Originalerror: com.XXX/com.XXX.main.guide.SplashScreenActivity never started. Current: com.XXX.v1/com.XXX.main.guide.MainActivity)
2.而加了'appWaitActivity'后,case1 首次启动就直接出错,appium error 如下:
error: com.XXX/com.XXX.main.guide.MainActivity never started. Current: com.XXX.v1/com.XXX.main.guide.guidance.GuidanceNewComerActivity
error: com.XXX/com.XXX.main.guide.MainActivity never started. Current: com.XXX.v1/com.XXX.main.city.CityListSwitchActivity
error: Failed to start an Appium session, err was: Error: com.XXX/com.XXX.main.guide.MainActivity never started. Current: com.XXX/com.XXX.main.city.CityListSwitchActivity
请教各位大神,这应该怎么办?
如果实在解决不了,那我就不加--no-reset 了,这样每次都走首次启动的流程,除了多花点时间以外,都是正常的。