2. appium入门
appium概念
客户端/服务器架构
Appium的核心是暴露RESET API的网络服务器。
它接受来自客户端的连接,监听命令并在移动设备上运行,答复表示执行结果的HTTP响应。
客户端/服务器架构实际给了许多可能性:
- 我们可以使用任何有http客户端API的语言编写我们的代码(选一个Appium客户端程序库用更容易)。
- Deslred Capabillities:一些发送给Appium服务器的键值对集合(比如map或hash),告诉服务器我们想要启动什么类型的自动化会话。
adb shell dumpsys activity|find "mFocusedActivity"
可获取当前应用包名。
appium使用步骤
- 打开模拟器
- 开启appium服务
- 编写Python脚本-使用appium库
- 运行Python脚本
Python脚本编写
- 引入appium包
from appium import webdrivr
- 提供模拟器/真机的信息,以字典数据类型存储设备信息。
- 连接appium:调用webdriver.Remote方法来与appium服务器进行连接,并告诉appium需要操作的设备对象
- 对设备进行操作:调用appium webdriver提供的各种API来对设备进行操作。
Deslred Capabillities示例
desired_caps = {}
desired_caps["platformName"]="Android"
desired_caps["platformVersion"]="5.1.1"
desired_caps["deviceName"]="device"
desired_caps["appPackage"]="com.ibox.calculators"
desired_caps["appActivity"]="com.ibox.calculators.CalculatorActivity"
Desired capabilities
是一些发送给Appium服务器的键值对集合(比如map或hash),告诉服务器我们想要启动什么类型的自动化会话。
也有各种可以在自动化运行时修改服务器的capabilities。例如,我们可以吧platformName capability设置为IOS,告诉Appium我们想要IOS会话,而不是Android或者Windows会话。我们也可以设置safariAllowPropups capability为true,确保我们在Safari自动化会话中可以使用JavaScript打开新窗口。
Appium服务器初始化参数(Capability):
常用参数如下:
键名 | 描述 | 值 |
---|---|---|
automationName | 自动化测试的引擎 | Appium(默认)或者Selendroid |
platformName | 使用的手机操作系统 | IOS,Android,或者FirefoxOS |
platformVersion | 手机操作系统的版本 | 例如7.1或4.4 |
deviceName | 使用的手机或者模拟器类型 | iPhone Simulator,iPad Simulator,iPhone Retina 4-inch,Android Emulator,Galaxy S4等等。。。在IOS上,使用Instruments的instruments -s devices命令可返回一个有效设备的列表。在Android上虽然这个参数目前已被忽略,但仍然需要添加上该参数 |
app | 本地绝对路径或远程http URL所指向的一个安装包(.ipa, .apk, 或.zip文件)。Appium将其安装到合适的设备上。请注意,如果您指定了appPackage和appActivity参数(见下文),Android Q则不需要此参数了。该参数也与browserName不兼容。 | /abs/pathto/my.apk或http://myapp.com/app.ipa |
noReset | 在当前session下不会重置应用的的状态。默认值为false。 | true,false |
fullReset | (IOS)删除所有的模拟器文件夹。\ (Android)要清除app里的数据,请将应用卸载才能达到重置应用的效果。在Android Q,在session完成之后也会将应用卸载掉。默认值为false。 | true,false |
Android特有的常用参数如下:
appActivity|Activity的名字是指从你的包中要启动的Android activity。通常需要在前面加“.”(例如使用“.MainActivity代替MainActivity)|MainActivity,.Settings
appPackage|运行的Android应用的包名|com.example.android.myapp, com.android.settings
appWaitActivity|用于等待启动的Android Activity名称
adb shell “dumpsys window windows | grep ‘name=.*/’” 可以获取当前屏幕运行的应用包名/Activity名。
UiAutomator
- UI Automator viewer - 识别app元素
- Accessing device state - 访问设备状态
- UI Automator APIs - 接口
使用appium定位
-
依次输入
-
点击元素,右边显示元素id
__author__ = 'Hello'
from appium import webdriver
import time
desired_caps = {}
desired_caps["platformName"]="Android"
desired_caps["platformVersion"]="5.1.1"
desired_caps["deviceName"]="device"
desired_caps["appPackage"]="com.ibox.calculators"
desired_caps["appActivity"]="com.ibox.calculators.CalculatorActivity"
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
time.sleep(8)
driver.find_element_by_id("com.ibox.calculators:id/digit8").click()
driver.find_element_by_id("com.ibox.calculators:id/plus").click()
driver.find_element_by_id("com.ibox.calculators:id/digit6").click()
driver.find_element_by_id("com.ibox.calculators:id/equal").click()
执行结果如下:
有时我们使用UiAutomatorViewer辅助定位。