有几个问题:
在 Appium 中,基于 app 测试,有很多.find_element_by_id 的步骤,而这些步骤会在测试用例中使用很多次,所以我想将这些步骤抽取出来,做成公用方法,或者类的方法,
这样在写用例的时候就可以快速开发。

由于刚入手 Appium 和 Python,对一些特性不太熟悉。我是创建一个 AndroidTest 类,继承 unittest.TestCase 类,然后在 AndroidTest 类中写入公共方法,如 GoUserTab()
这样子在 MyAndroidTest(AndroidTest) 中,可以这样使用:AndroidTest.GoUserTab(self)

但是问题:
1)我又在 AndroidTest 类中定义了一个类 User,和其方法 GoUserTab2(),想将用户相关操作放在一起,为何使用的时候 AndroidTest.User.GoUserTab2(self) 就报错呢?

TypeError: unbound method GoUserTab2() must be called with User instance as first argument (got YYWAndroidTest instance instead)

2)大家对写用例的时候,将公共步骤提取成方法有好的建议吗?

Python 代码如下

# coding:utf-8
import os
import unittest
from appium import webdriver
from time import sleep

PATH = lambda p: os.path.abspath(
    os.path.join(os.path.dirname(__file__), p)
)


class AndroidTest(unittest.TestCase):
    def setUp(self):
        desired_caps = {}
        desired_caps['platformName'] = 'Android'
        desired_caps['platformVersion'] = '4.4'
        desired_caps['deviceName'] = 'MI_2'
        desired_caps['app'] = PATH(
            'myapp.apk'
        )
        desired_caps['appPackage'] = 'com.myapp'
        desired_caps['appActivity'] = '.LoadingActivity'  # 启动APP显示Splash的Activity

        self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

    def tearDown(self):
        self.driver.close_app()
        self.driver.quit()

    def GoUserTab(self):  
        self.driver.find_element_by_id('myapp:id/navigation_user_btn').click()


    class User():
        def GoUserTab2(self):  
            AndroidTest.driver.find_element_by_id('myapp:id/navigation_user_btn').click()  #点击用户按钮进入用户信息页面


class MyAndroidTest(AndroidTest):

    def test_user_tab(self):
        self.driver.implicitly_wait(8)
        AndroidTest.GoUserTab(self) #这样用没有问题
        #AndroidTest.User.GoUserTab2(self)  #这样用会报错


# unitest.main()函数用来测试 类中以test开头的测试用例
if __name__ == '__main__':
    suite = unittest.TestSuite()
    suite.addTest(MyAndroidTest("test_user_tab"))
    unittest.TextTestRunner(verbosity=2).run(suite)


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