App会话设置参数:
automationName 自动化引擎名称(Appium, Selendroid)默认使用Appium引擎
platformName 移动平台(iOS, Android, FirefoxOS)
deviceName 设备名称(Android平台随便填)
app 应用的绝对路径
browserName 移动浏览器名称,与app属性冲突
udid 真机的id
android平台特有设置
appActivity
appPackage
通过aapt命令查看apk文件获取APP的Package和Activity
aapt 所在目录sdk\build-tools\android-4.4W
查看命令
aapt dump badging xxx.apk | findstr name=
desired_caps['platformName'] = "Android"
desired_caps['deviceName'] = 'xxx'
desired_caps['automationName'] = 'Appium'
desired_caps['platformVersion'] = '4.4.4'
#desired_caps['app'] = r"D:\tmp\apks\ApiDemos-debug.apk"
desired_caps['appPackage'] = "com.android.androidui"
desired_caps['appActivity'] = "com.android.androidui.MainActivity"
例如:
import unittest
from appium import webdriver
from time import sleep
class AndroidTests(unittest.TestCase):
"""
App测试用例
"""
def setUp(self):
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['deviceName'] = 'Android Emulator'
desired_caps['appPackage'] = 'com.android.androidui'
desired_caps['appActivity'] = 'com.android.androidui.MainActivity'
self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
self.driver.implicitly_wait(10)
def tearDown(self):
sleep(2)
self.driver.quit()
def test1(self):
driver = self.driver
el = driver.find_element_by_android_uiautomator('.resourceId("com.android.androidui:id/seekBar1")')
# el.click()
loc = el.location
siz = el.size
x= loc['x'] + 25.0*siz['width']/100
y= loc['y'] + siz['height']/2
driver.tap([(x,y)],duration=1000)
如果需要输入中文,还需要加入以下设置
desired_caps['unicodeKeyboard'] = True
desired_caps['resetKeyboard'] = True
APP启动方式 appPackage、appActivity
desired_caps[‘appPackage’]=‘包名’
desired_caps[‘appActivity’]=‘Activity名’
模拟点击:
driver.click()点击控件最中间
driver.tap([x,y],duration=0.5) 点击时间不填写默认为none,坐标需要用list表示
模拟滑动
driver.swipe(loc['x']+100, y ,x ,y, duration=1000)#前面的x,y表示起始位置,后面的x,y表示目标位置,duration=1000代表1秒
driver.flick()无法指定duration
TouchAction()
#创建touchaction对象
action = TouchAction(driver)
#点击滑动1秒 松开 执行
action.tap(x=loc['x']+100,y=y).wait(1000).move_to(x=x,y=y).release().perform()
action.tap(x=x,y=y).perform()
#滑动
action.press(x=loc['x']+100,y=y).wait(1000).move_to(x=x,y=y).release().perform()
对于app内有html页面的 定位元素是我们需要用到context
driver.context获取当前上下文
drivers.context获取所有上下文
类似于selenium里的handle
driver = self.driver
el = driver.find_element_by_android_uiautomator('.resourceId("io.selendroid.testapp:id/buttonStartWebview")')
el.click()
sleep(1)
print driver.context
print driver.contexts
driver.switch_to.context(driver.contexts[1])
其他
driver.install_app()路径
driver.remove_app()package
driver.launch_app()启动
driver.close_app()关闭
driver.reset()
hide_keyboard()隐藏键盘