Appium [已解决] Appium 出现 error: com.XXX/.activity1 never started. Current: com.XXX/.activity2

xin · June 16, 2015 · Last by cloudy replied at October 19, 2017 · 1804 hits

目前刚开始学习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了,这样每次都走首次启动的流程,除了多花点时间以外,都是正常的。

共收到 11 条回复 时间 点赞
1Floor has been deleted

首次启动这个试过吗

desired_caps['appActivity'] = 'com.XXX.main.guide.SplashScreenActivity'
desired_caps['appWaitActivity'] = 'com.XXX.main.guide.GuidanceNewComerActivity
xin #3 · June 16, 2015 作者

@sanlengjingvv 试过了,最后有写
2.而加了'appWaitActivity'后,case1就直接出错

分两个suit

1、重新安装app
2、执行首次启动的用例,用

desired_caps['appActivity'] = 'com.XXX.main.guide.SplashScreenActivity'
desired_caps['appWaitActivity'] = 'com.XXX.main.guide.GuidanceNewComerActivity

3、结束session,新session用

desired_caps['appActivity'] = 'com.XXX.main.guide.MainActivity'
desired_caps['appWaitActivity'] = 'com.XXX.main.guide.SplashScreenActivity'

4、执行非首次启动的用例

xin #5 · June 16, 2015 作者

@sanlengjingvv 如何结束session,再启新session?

最近怎么出现这个问题的同学多了...是1.4.1?

xin #7 · June 17, 2015 作者

@anikikun
➜ ~ appium -v
1.4.3

把 No-reset 去掉

driver.quit() 就结束session了。

xin #10 · June 17, 2015 作者

@sanlengjingvv 我懂你的意思了,就是写两个类,每个类的setUp用不同的appWaitActivity,第一个类执行首次启动,第二个类执行其余非首次的cases。确实,按照--no-reset的启动方式,和我程序的逻辑,分两个suit确实能执行通过了,谢谢啦~

#10楼 @galactics
不会 Python,Java 和 TestNG 的话,appWaitActivity 和 appActivity 的值可以作为 suit 的参数写在 xml 里,不用改多少代码。
不过写法很多,看需求了。

我已经解决这个问题,你可以这样设置:
desired_caps['appWaitActivity'] = 'com.XXX.main.guide.*'

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up