测试环境:
安卓,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 的值吗?该怎么修改才能确保用例能够在不同界面间连贯去执行呢?

请问大家在实际使用中遇到这个情况是如何解决的呢?


↙↙↙阅读原文可查看相关链接,并与作者交流