发布:2023/10/22 21:39:38作者:管理员 来源:本站 浏览次数:434
AppiumPythonClient API
AppiumPythonClient是从selenium继承的,所以在使用方法上与selenium库类似
初始化(Remote类)
使用python测试app时,首先要创建Remote类的实例,Remote类的构造方法需要传入2个参数
例子:
第1个参数时Appium服务器的URL本例时http://localhost:4723/wd/hub
第2个参数是一个字典类型的值,用于设置Desired Capabilities参数,该参数需要设置的属性比较多,现只设置4个属性
一般来说,需配置下面的参数
from appium import webdriver
server="http://localhost:4723/wd/hub"
desireds_caps={
"deviceName": "edf37570",
"appPackage": "com.tencent.mm",
"appActivity": "com.tencent.mm.plugin.account.ui.WelcomeActivity",
"platformName": "Android",
"noReset": "True"
}
driver=webdriver.Remote(server,desireds_caps)
一般就是这样的配置,指定启动和测试手机上的哪个APP,这样appium就会自动查手机上与指定包和入口匹配的Activity,然后运行这个Activity
如果要打开app在手机上没有安装,可以指定app参数为安装包所在的路径,这样程序在运行时就会自动在手机上安装这个app
from appium import webdriver
server="http://localhost:4723/wd/hub"
desireds_caps={
"deviceName": "edf37570",
"app": "./weixin.apk",
"platformName": "Android"
}
driver=webdriver.Remote(server,desireds_caps)
程序启动时会将当前路径下的apk文件安装到手机上,并启动app
查看元素
可以使用selenium中的差值方法实现对app中ui元素的查找,推荐使用id,当然也可以使用其他方法
elemen=driver.find_element_by_id('com.tencent.mm:id/j_i')
在Android平台,可以使用UIAutomator来选取元素
element1=driver.find_element('-android uiautomator','new UiSelector().text("登录")')
element2=driver.find_element('-android uiautomator','new UiSelector().resource-id
("com.tencent.mm:id/j_i")')
单击元素
单击元素可以使用tap方法,该方法可以模拟手指点击动作,支持多指触摸,最多5个手指,还可以设置点击时长(单位:毫秒),该tap方法原型:
tap(self,positions,duration=None)
其中两个参数描述:
positions:点击的位置组成的列表
duration:点击持续时间
案例:
driver.tap([(120,4),(300,13),(100,100),(300,23)],800)
这行代码模拟手指同时按4个点,持续800秒
如果某个元素是按钮,也可以直接使用click方法完成模拟点击工作
buuton=driver.find_element('-android uiautomator','new UiSelector().text("登录")').click()
屏幕拖动
可以使用scroll方法模拟屏幕拖动,原型
scroll(self,origin,destination,duration=600)
该方法可以实现从元素origin滚动到元素destination
最后两个参数
origin:被操作的元素
destination:元素目标
scroll方法具有惯性,duration值越大惯性越小,默认600
实例:
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
import time
server="http://localhost:4723/wd/hub"
desireds_caps={
"deviceName": "edf37570",
"appPackage": "com.*****.ck",
"appActivity": "*******nActivity",
"platformName": "Android",
"platformVersion": "11",
"noReset":True,
}
driver=webdriver.Remote(server,desireds_caps)
time.sleep(6)
WebDriverWait(driver,20)
el1 = driver.find_element(by=AppiumBy.ACCESSIBILITY_ID, value="知道了")
el1.click()
WebDriverWait(driver,10)
el2 = driver.find_element(by=AppiumBy.ACCESSIBILITY_ID, value="****")
el3 = driver.find_element(By.XPATH,'//android.view.View[@content-desc="*****"]')
driver.scroll(el3,el2)
注意,是向下滑动至el3
屏幕滑动
可以使用swipe方法模拟以A点滑到B点,原型
swipe(self,start_x,start_y,end_x,end_y,duration=None)
参数描述:
start_x:开始位置的横坐标
start_y:开始位置的纵坐标
end_x:终止位置的横坐标
end_y:终止位置的纵坐标
duration:持续时间,单位是毫秒
实例:
driver.swipe(186,2156,186,447,3000)
3秒内,向上滑动
可以使用flick方法模拟从A点快速滑动到B点,原型:
flick(self,start_x,start_y,end_x,end_y)
参数描述:
start_x:开始位置的横坐标
start_y:开始位置的纵坐标
end_x:终止位置的横坐标
end_y:终止位置的纵坐标
driver.flick(186,2156,186,447)
拖曳操作
使用drag_and_drop方法可以将某一个元素拖曳到另一个目标元素上,原型:
drag_and_drop(self,origin,destination)
该方法可以实现将origin拖曳到元素destination上
参数:
original:被拖曳的元素
destination:目标元素
driver.drag_and_drop(el3,el2)
经测试有时候失效,未知原因
文本输入
使用set_text方法和send_keys方法都可以实现文本输入
phone.set_text("13189391452")
phone.send_keys("13189391452")
动作链
与selenium的ActionChains类似,Appium中的TouchAction可支持的方法包含tap,press,long_press,release,move_to,cancel,wait等
例子1:利用TouchAction实现点击操作
el2 = driver.find_element(By.XPATH,'//android.view.View[@content-desc="****"]')
action=appium.webdriver.common.touch_action.TouchAction(driver)
action.tap(el2).perform()
© Copyright 2014 - 2024 柏港建站平台 ejk5.com. 渝ICP备16000791号-4