有几个问题:
在 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)