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

xin · 2015年06月16日 · 最后由 cloudy 回复于 2017年10月19日 · 4138 次阅读

目前刚开始学习 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 条回复 时间 点赞
12楼 已删除

首次启动这个试过吗

desired_caps['appActivity'] = 'com.XXX.main.guide.SplashScreenActivity'
desired_caps['appWaitActivity'] = 'com.XXX.main.guide.GuidanceNewComerActivity 
xin #4 · 2015年06月16日 Author

@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 #6 · 2015年06月16日 Author

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

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

xin #2 · 2015年06月17日 Author

@anikikun
➜ ~ appium -v
1.4.3

把 No-reset 去掉

driver.quit() 就结束 session 了。

xin #3 · 2015年06月17日 Author

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

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

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

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册