appium

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)

其中两个参数描述:

  1. positions:点击的位置组成的列表
  2. 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)

参数描述:

  1. start_x:开始位置的横坐标
  2. start_y:开始位置的纵坐标
  3. end_x:终止位置的横坐标
  4. end_y:终止位置的纵坐标
  5. duration:持续时间,单位是毫秒

实例:

driver.swipe(186,2156,186,447,3000)

3秒内,向上滑动

可以使用flick方法模拟从A点快速滑动到B点,原型:

flick(self,start_x,start_y,end_x,end_y)

参数描述:

  1. start_x:开始位置的横坐标
  2. start_y:开始位置的纵坐标
  3. end_x:终止位置的横坐标
  4. end_y:终止位置的纵坐标
driver.flick(186,2156,186,447)

拖曳操作

使用drag_and_drop方法可以将某一个元素拖曳到另一个目标元素上,原型:

drag_and_drop(self,origin,destination)

该方法可以实现将origin拖曳到元素destination上

参数:

  1. original:被拖曳的元素
  2. 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()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值