与Web元素操作一样(参考Selenium Web元素操作),定位到APP控件元素后,可以对控件进行一系列的操作,实现与APP交互,比如点击、文本输入、元素属性获取等。
目录
- 元素操作
- 元素常用操作方法
- Python测试实例
- 元素属性
- get_attribute()方法
- 属性获取实例
- 系列文章
元素操作
元素常用操作方法
- 点击方法 element.click()
- 输入操作 element.send_keys(“appium”)
- 设置元素的值 element.set_value(“appium”)
- 清除操作 element.clear()
Python测试实例
安装ApiDemos-debug.apk,下载地址:https://github.com/appium/appium/blob/master/sample-code/apps/ApiDemos-debug.apk
- 点击Views
- 滑动选择并点击TextFields
- 输入文本“appium”
- 清除文本
#!/usr/bin/python3
#-*-coding:utf-8-*-
import pytest
from appium import webdriver
from appium.webdriver.common.mobileby import MobileByclass TestLocator:def setup(self):desired_caps = {}desired_caps['platformName'] = 'Android'desired_caps['platformVersion'] = '6.0.1'desired_caps['deviceName'] = '127.0.0.1:7555'desired_caps['appPackage'] = 'io.appium.android.apis'desired_caps['appActivity'] = '.ApiDemos'desired_caps['automationName'] = 'Uiautomator2'desired_caps['newCommandTimeout'] = 3000desired_caps['noReset'] = Truedesired_caps['dontStopAppOnReset'] = Truedesired_caps['skipDeviceInitialization'] = Truedesired_caps['unicodeKeyboard'] = Truedesired_caps['resetKeybBoard'] = Trueself.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)self.driver.implicitly_wait(5)def teardown_method(self):self.driver.quit()def test_locator(self):self.driver.find_element_by_xpath('//*[@text="Views"]').click()self.driver.find_element_by_android_uiautomator('new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text("TextFields").instance(0));').click()elem = self.driver.find_element(MobileBy.ID, "io.appium.android.apis:id/edit")elem.send_keys("appium")elem.clear()
元素属性
- 获取属性值:get_attribute(name)
- 获取元素文本:element.text
- 获取元素坐标:element.location
- 获取元素尺寸(高和宽): element.size
- 是否可见 element.is_displayed 返回True/False
- 是否可用 element.is_enabled 返回True/False
- 是否被选中 element.is_selected 返回True/False
get_attribute()方法
get_attribute()方法能获取的属性,元素的属性几乎都能获取到。属性名称和uiautomatorviewer里面的一致。
字符串类型:
- text:返回 text
- resource-id:返回 resource-id, API=>18
- class:返回 class, API=>18
- content-desc:返回 content-desc属性
- bounds
布尔类型:
- checkable
- checked
- clickable
- enabled
- focusable
- focused
- scrollable
- long-clickable
- password
- selected
- displayed
注意:有些属性展示在 uiautomatorviewer里,但是不能通过get_attribute获取,比如: index。
属性获取实例
获取“App”的属性值
from appium import webdriver
from appium.webdriver.common.mobileby import MobileByclass TestGetAttribute:def setup(self):desired_caps = {}desired_caps['platformName'] = 'Android'desired_caps['platformVersion'] = '6.0.1'desired_caps['deviceName'] = '127.0.0.1:7555'desired_caps['appPackage'] = 'io.appium.android.apis'desired_caps['appActivity'] = '.ApiDemos'desired_caps['automationName'] = 'Uiautomator2'desired_caps['newCommandTimeout'] = 3000desired_caps['noReset'] = Truedesired_caps['dontStopAppOnReset'] = Truedesired_caps['skipDeviceInitialization'] = Truedesired_caps['unicodeKeyboard'] = Truedesired_caps['resetKeybBoard'] = Trueself.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)self.driver.implicitly_wait(5)def teardown_method(self): self.driver.quit()def test_get_attribute(self):elem = self.driver.find_element_by_xpath('//*[@text="App"]')print("text:" + elem.get_attribute("text"))print("resource-id:" + elem.get_attribute("resource-id"))print("class:" + elem.get_attribute("class"))print("package:" + elem.get_attribute("package"))print("content-desc:" + elem.get_attribute("content-desc"))print("bounds:" + elem.get_attribute("bounds"))print("checkable:" + elem.get_attribute("checkable"))print("checked:" + elem.get_attribute("checked"))print("clickable:" + elem.get_attribute("clickable"))print("enabled:" + elem.get_attribute("enabled"))print("password:" + elem.get_attribute("password"))print("displayed:" + elem.get_attribute("displayed"))print("######################")print("text:" + elem.text)print(elem.location)print(elem.size)print(elem.is_displayed)print(elem.is_enabled)print(elem.is_selected)
执行结果:
text:App
resource-id:android:id/text1
class:android.widget.TextView
package:io.appium.android.apis
content-desc:App
bounds:[0,342][720,414]
checkable:false
checked:false
clickable:true
enabled:true
password:false
displayed:true
######################
text:App
{'x': 0, 'y': 342}
{'height': 72, 'width': 720}
<bound method WebElement.is_displayed of <appium.webdriver.webelement.WebElement (session="cceeee8f-ad89-4d00-ab4f-25b57de58ea5", element="a1443341-aad8-4814-8f9b-27ada3fe6f50")>>
<bound method WebElement.is_enabled of <appium.webdriver.webelement.WebElement (session="cceeee8f-ad89-4d00-ab4f-25b57de58ea5", element="a1443341-aad8-4814-8f9b-27ada3fe6f50")>>
<bound method WebElement.is_selected of <appium.webdriver.webelement.WebElement (session="cceeee8f-ad89-4d00-ab4f-25b57de58ea5", element="a1443341-aad8-4814-8f9b-27ada3fe6f50")>>
系列文章
1、Appium 介绍及环境安装
2、selenium/appium 等待方式介绍
3、App控件定位:Android 控件介绍及元素定位方法
4、Appium元素定位(一)
5、Appium元素定位(二):UiAutomator定位
6、Appium控件交互
7、Android WebView测试
8、AppCrawler自动遍历测试
9、自动遍历测试之Monkey工具
10、App自动化测试工具Uiautomator2
11、App自动化测试工具Airtest
12、Android手机管理平台搭建:STF和atxserver2
13、Windows上实现iOS APP自动化测试:tidevice + WDA + facebook-wda / appium
14、iOS APP自动化:predicate定位
15、iOS APP自动化:class chain定位方法
16、使用facebook-wda进行iOS APP自动化测试
欢迎关注公众号:「测试开发小记」及时接收最新技术文章!