Appium

一、安装环境

        (1)安装Java SDK和Android SDK,详情见APP测试APP测试_雷鸣的击的博客-CSDN博客

        (2)安装node.js
        下载地址: https://nodejs.org/en/

        备注:尽量安装老版本的node,新版本对appium不适配,在使用中容易出现各种不知名错误
验证环境是否安装成功:

        (3)安装Appium
        下载地址: https://github.com/appium/appium-desktop/releases

        (4)Python环境
        下载地址: https://www.python.org/downloads/windows/
        下载后直接安装即可;需要勾选添加到PATH;这样系统变量就不用加了

        验证环境是否安装成功:
        1、打开cmd,输入python,正常显示即安装成功


        (5)安装Appium-python-clienf
        通过命令: pip install Appium-Python-Client 进行安装
        检测安装:在python中输入 from appium import webdriver 回车
        控制台没有报错则说明安装成功

二、使用appium获取元素信息

1、打开appium,填入信息,点击【Start Server】

2、点击右上角放大镜标志

3、进入如下图

4、在Desired Capabilities 或Saced Capabilities Sets下填写需要获取APP元素的配置。点击Save As保存下来

 5:点击 

如下图,即可参考元素的属性信息

三、appium常用命令操作

1、连接打开APP

from appium import webdriver

desired_capabilities={
    'platformName':'Android'            #系统
    'deviceName':'192.168.199.1:5555'   #设备型号,Android无效,但配置项不能缺少,ISO系统有效
    'platformVersion':'7.0'             #版本
    'appPackage':'com.neweggcn.app'     #APP的包名
    'appActivity':'com.neweggcn.app.MainActivity'    #启动的ativity名称

driver=webdriver.Remote('http://localhost:4723/wb/hub',desired_capalilities)  #地址为Appium地址

capabilitiy配置较多,可以根据具体要求进行配置。

2、定位

(1)id定位

        id定位是根据属性resource-id进行定位的

        注意:app的resource-id属性不唯一,这是seleium的id定位的区别

driver.find_element_by_id("com.newggcn.app:id/tools_order_traching")

 (2)class name定位

        一般很少使用,因为class属性没有标识性。

driver.find_element_by_class_name()

(3)accessibility id定位

        accessibility id定位是根据content-desc属性定位,使用较少,因为大部分时候content-desc为空的。

driver.find_element_by_accessibility_id()

(4)Xpath定位

driver.find_element_by_xpath()

(5)UIAutomator定位

        该定位方式使用较少,通过调用Android UIAutomator类库去找元素。

driver.find_element_by_android_uiautomator()

(6)By定位

from appium.webdriver.common.mobileby import MobileBy as By

driver.find_element(BY.XPATH,locator)   #通过xpath定位
driver.find_element(BY.ID,locator)    #通过resource-id属性定位
driver.find_element(BY.CLASS_NAME,locator)    #通过class属性定位
driver.find_element(BY.ACCESSIBILITY_ID,locator)    #通过content-desc属性定位
driver.find_element(BY.ANDROID_UIAUTOMATOR,locator)    #通过UIAUTOMATOR定位

3、元素操作

locator=driver.find_element_by_accessibility_id()
locator.click() #点击元素
locator.clear() #清空元素文本文字
locator.send_keys()    #模拟输入值
driver.contexts     #获取上下文
driver.current_context   #获取当前所在上下文
driver.switch_to_context()     #切换到指定的context
driver.current_activity   #获取当前activity
locator.text    #获取当前元素的text属性的值
locator.get_attribute()   #获取当前元素指定的属性值
locator.size    #获取元素大小
locator.location   #获取元素左上角的坐标
locator.is_selected()  #检查元素是否被选中
locator.is_enabled()   #检查元素是否可用
locator.is_displayed()  #检查元素是否可见
driver.get_windoe_size(windowHandle='current')    #获取窗口大小

(1)多点触摸

driver.top(postitions,durations=None)

postitions:具体坐标,格式是列表包含的元组

durations:点击的时间,单位毫秒

例子

driver.top([(100,5),(20,10),(50,100)],500)

 点击这三个坐标点,时间为500毫秒

(2)元素拖动

driver.scroll(origin_el,destinarion_el)

origin_el:开始元素
destinarion_el:结束元素

dl1=driver.find_element_by_id()
dl2=driver.find_element_by_id()
driver.scroll(el1,el2)
driver.drag_and_drop(origin_el,destinarion_el)

 drag_and_drop和scroll区别在于drag_and_drop在开始元素长按100毫秒,而scrol不会停顿。

(3)屏幕滑动

driver.swipe(start_x,start_y,end_x,end_y,duration=None)
driver.flick(start_x,start_y,end_x,end_y)

参数分别为开始的X、Y坐标,结束X、Y坐标,swipe和flick区别在于滑动延迟时间设置,duration单位是毫秒。

(4)隐藏键盘

系统可能会自带软键盘,会影响测试,可以通过hide_keyboar()进行隐藏

driver.hide_keyboard()

 (5)等待

driver.wait_activity(activity,timeout,interval=1)

 activty:等待目标activity

timeout:超时时间

interval:间隔几秒检查一次

其它等待与seleium一样。

(6)截图

driver.get_screenshot_as_file()
driver.save_screenshot()

除了上述两种常用的方式外,还可以将图片保存为字符串

driver.get_screenshot_as_base64()     #该方法返回一个base64字符串

 将base字符串写入文件中

import base64  #引入base64

base64.b64decode(base64字符串)    #转化为二进制图片,再写入文件即可,使用“wb”方式打开文件

(7)TouchAction 类

from appium.webdriver.common.touch_action import TouchAction    #引入

action=TouchAction(driver)  #实例化类

        1)tap触摸

        触摸元素或者坐标点

action.tap(element=None,x=None,y=None,count=1)

        element:元素对象

        count:触摸次数

      2)press 短按

        模拟手指在某个元素或坐标点按下

action.press(element=None,x=None,y=None)

        3)long_press 长按

         模拟手指在某个元素或坐标点按下,可设置按下的持续时间。

action.long_press(element=None,x=None,y=None,duration=100)

        4)wait等待

        模拟操作过程中的等待时间,单位毫秒

action.wait(ms=0)

         5)move_to移动

        从上一个元素或坐标移动到目标元素或坐标

action.move_to(element=None,x=None,y=None)

        6)release释放

        如果有按下操作(press、long_press)时,需要使用release()方法释放按下操作

action.release()

        7)perform提交

使用该方法后,TouchAction类的方法才会执行。

action.perform()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值