APPium自动化常用指令

APPium自动化常用指令

常用连接配置

desired_caps = {
    'platformName': 'Android',    # 被检测手机系统 安卓 or 苹果
    'platformVersion': '5.1.1',    # 手机安卓版本
    # 'deviceName': '127.0.0.1:62001',    # 设备名称。如果是真机,在'设置->关于手机->设备名称'里查看
    'deviceName': 'emulator-5554',
    'appPackage': 'com.tencent.mobileqq',    # 启动APP Package名称
    'appActivity': '.activity.SplashActivity',   # 启动Activity的名称
    'noReset': True,  # 不重置APP
    'newCommandTimeout': 6000,    # 加长操作时间,默认一分钟后自动关闭
    # 以上必填,以下选填
    'unicodeKeyboard': True,    # 使用unicode输入法,输入中文时需要使用,填True,看模拟器输入法,有些需要安装,有些不需要
    'resetKeyboard': True,    # 执行完程序回复原来输入法
    # 'automationName': 'UiAutomator2', # 获取toast信息弹出框需添加,但需要先配置UiAutomator2
    # 'app': r'D:\apk\bili.apk',	# 测试apk包的路径,如果有了app就不需要APP Package和Activity,反理同之
}

连接Appium Server,初始化自动化环境

from appium import webdriver

driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

隐式等待和显式等待

隐式等待

当发现元素没有找到的时候, 并不立即返回找不到元素的错误。而是周期性(每隔半秒钟)重新寻找该元素,直到该元素被找到,或者超出指定最大等待时长,这时才 抛出异常(如果是 find_elements 之类的方法, 则是返回空列表)。

Selenium 的 Webdriver 对象 有个方法叫 implicitly_wait

该方法接受一个参数,用来指定 最大等待时长。

# 设置缺省等待时间
driver.implicitly_wait(10)

显式等待

顾名思义,显式等待就是运行代码后设置好固定的等待时间,然后再继续运行,常用的为 time 模块的 sleep 方法

该方法接受一个参数,用来指定 最大等待时长。

import time
time.sleep(1)

界面元素查看工具

做 Selenium Web 自动化的时候,要找到元素,我们是通过浏览器的开发者工具栏来查看元素的特性,根据这些特性(属性和位置),来定位元素

Appium 要自动化手机应用,同样需要工具查看界面元素的特征。

常用的查看工具是: Android Sdk包中的 uiautomateviewer 和 Appium

定位元素

Appium是基于Selenium的,所以 和 Selenium 代码 定位元素的 基本规则相同:

  • find_element_by_XXX 方法,返回符合条件的第一个元素,找不到抛出异常
  • find_elements_by_XXX 方法,返回符合条件的所有元素的列表,找不到返回空列表
  • 通过 WebDriver 对象调用这样的方法,查找范围是整个界面
  • 通过 WebElement 对象调用这样的方法,查找范围是该节点的子节点

根据ID

在 Selenium Web 自动化教程里,如果能根据 ID 选择定位元素,最好根据ID,因为通常来说ID是唯一的,所以根据 ID 选择 效率高。

在安卓应用自动化的时候,同样可以根据 ID 查找。

但是这个ID ,是安卓应用元素的 resource-id 属性

使用如下代码

driver.find_element_by_id('')

根据CLASS NAME

安卓界面元素的 class 属性 其实就是根据元素的类型,类似 web 里面的 tagname, 所以通常不是唯一的。

通常,我们根据 class 属性来选择元素, 是要选择多个而不是一个。

当然,如果你确定要查找的界面元素的类型在当前界面中只有一个,就可以根据class来唯一选择。

使用如下代码

driver.find_elements_by_class_name('android.widget.TextView')

根据ACCESSIBILITY ID

元素的 content-desc 属性是用来描述该元素的作用的。

如果要查询的界面元素有 content-desc 属性,我们可以通过它来定位选择元素。

使用如下代码

driver.find_element_by_accessibility_id('')

Xpath

Appium 也支持通过 Xpath 选择元素。

但是其可靠性和性能不如 Selenium Web 自动化。因为 Web 自动化对 Xpath 的支持是由浏览器实现的,而 Appium Xpath 的支持是 Appium Server 实现的。

毕竟,浏览器产品的成熟度比 Appium 要高很多。

当然,Xpath是标准语法,所以这里表达式的语法规则和以前学习的Selenium里面Xpath的语法是一样的,比如

driver.find_element_by_xpath('')

注意:

selenium 自动化中,xpath 表达式中每个节点名是 html 的 tagname。

但是在 appium 中,xpath 表达式每个节点名是元素的 class 属性值。

比如:要选择所有的文本节点,就使用如下代码

driver.find_element_by_xpath('//android.widget.TextView')

Appium键盘操作

appium扩展提供了pressKeyCode()方法。该方法Android特有。

常用键盘操作键:

KEYCODE_HOME 按键Home

KEYCODE_MENU 菜单键

KEYCODE_BACK 返回键

KEYCODE_ENTER 回车键

KEYCODE_ESCAPE ESC键

KEYCODE_CTRL_LEFT Control+Left

KEYCODE_CTRL_RIGHT Control+Right

比如:

from appium.webdriver.extensions.android.nativekey import AndroidKey

driver.pressKeyCode(AndroidKey.enter)
上一篇:js禁止页面回退 禁止刷新页面


下一篇:input输入框禁止显示历史记录