隐藏

appium

发布: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()