启动
Appium启动时需要指定一些通用配置,统称为Desired Capabilities,具体的一些参数可以参考Appium服务器初始化参数。这里介绍一些通用的参数与一些常见的问题。
platformName
手机操作系统
platformVersion
手机操作系统版本
deviceName
手机类型
app
待测app的路径
appActivity, appPackage
appActivity与appPackage指用于启动待测app的activityName与packageName,appium(1.6.4)已经支持activityName与packageName的自动检测,这两个参数已经可以省略了
newCommandTimeout
两条appium命令间的最长时间间隔,若超过这个时间,appium会自动结束并退出app
noReset, fullReset
noReset 不要在会话前重置应用状态。默认值false。 fullReset (Android) 通过卸载而不是清空数据来重置应用状态。在Android上, 这也会在会话结束后自动清除被测应用。默认值false。
unicodeKeyboard, resetKeyboard
在输入的时候,可能出现键盘挡住控件的情况,这时候需要使用 appium 提供的输入法(支持输入多语言,没有键盘 ui ),unicodeKeyboard 为 true 表示使用 appium-ime 输入法。 resetKeyboard 表示在测试结束后切回系统输入法。
appWaitActivity, appWaitPackage
appium需要等待的activityName与packageName,与appActivity不同的是,对于有启动动画的app来说,appWaitActivity应该是启动activity消失后出现的activity。这两个参数可以指定多个。
控件定位
android sdk的tools目录下自带一个元素查看工具uiautomatorviewer,通过这个工具可以获取到app的各个元素属性,辅助我们编写相关的脚本,uiautomatorviewer的界面如下:
常用的定位方法:
id
使用元素的resource-id属性定位,如:
driver.find_element_by_id('com.android.calculator2:id/digit1')
class
使用元素的class属性定位,如:driver.find_element_by_class_name('android.widget.Button')
xpath
定位速度很慢,不推荐。xpath的定位方式很多,这里就不一一叙述了。
基本操作
.click()
点击操作,一般用在查找元素后面,如:
driver.find_element_by_id('com.android.calculator2:id/digit1').click()
.send_keys
输入操作,一般用在查找元素后面,如:
driver.find_element_by_class_name('android.widget.EditText').send_keys("123456")
.clear()
清除文本框内的所有字段,如:
driver.find_element_by_class_name('android.widget.EditText').clear()
swipe()
滑动操作,如:
driver.swipe(900,1320,180,600,1000)
括号内的五个值分别是x坐标的起始位置、y坐标的起始位置、x坐标的目标位置、y坐标的目标位置和滑动时长(毫秒)
wait_activity()
等待activity出现时间,如:
wait_activity('.activity.HomeActivity',5)
括号内前面的是要等待的activity,后面的是超时时间,单位是秒。若超过这个时间等待的activity还没出现就跳过这个命令。
组织用例
unittest是python的一个单元测试框架,它可以帮助我们有效组织用例,把用例的不同部分区分开来。我们写一个登录的测试脚本:
使用的APP
import unittest
from time import sleep
from appium import webdriver
class Login(unittest.TestCase):
def setUp(self):
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '6.0'
desired_caps['deviceName'] = 'Huawei'
desired_caps['appPackage'] = 'com.happy.food'
desired_caps['appActivity'] = 'com.happy.food.activity.LauncherActivity'
desired_caps["unicodeKeyboard"] = True
desired_caps["resetKeyboard"] = True
url = "http://127.0.0.1:4723/wd/hub"
global driver
driver = webdriver.Remote(url,desired_caps)
sleep(3)
def test_login(self):
EditText = driver.find_elements_by_class_name("android.widget.EditText")
#获取所有的输入框
EditText[0].send_keys("13410066133")
EditText[1].send_keys("1234567a")
driver.find_element_by_id("com.happy.food:id/login").click()
sleep(3)
def tearDown(self):
driver.quit()
if __name__ == '__main__':
unittest.main()
运行脚本:
/Users/yaulola/Public/appium-Android/venv/bin/python /Users/yaulola/Desktop/appium/test.py
.
----------------------------------------------------------------------
Ran 1 test in 42.277s
OK
Process finished with exit code 0
setUp在每条用例前执行,
tearDown在每条用例后执行,
test_xxx 为要执行的用例,必须以test开头。
网友评论