Appium 支持一个 Webdriver 元素定位方法的子集
### 标签名抽象映射
你可以使用 UIAutomation 的控件类型用于标签名, 或者使用简化的映射, 可以参考下如下例子
https://github.com/appium/appium/blob/master/lib/uiauto/lib/mechanic.js#L29
(官方文档外的补充)
对于 Android 下的元素对应, 可以参考
https://github.com/appium/appium/blob/master/lib/devices/android/bootstrap/src/io/appium/android/bootstrap/AndroidElementClassMap.java
WD.js:
driver.elementsByTagName('button', function(err, buttons) {
// tap all the buttons
var tapNextButton = function() {
var button = buttons.shift();
if (typeof button !== "undefined") {
button.click(function(err) {
tapNextButton();
})
} else {
driver.quit();
}
}
tapNextButton();
});
Ruby:
buttons = @driver.find_elements :tag_name, :button
buttons.each { |b| b.click }
Python:
[button.click() for button in driver.find_elements_by_tag_name('button')]
WD.js:
driver.elementByName('Go', function(err, el) {
el.tap(function(err) {
driver.quit();
});
});
Ruby:
@driver.find_element(:name, 'Go').click
Python:
driver.find_element_by_name('Go').click()
WD.js:
driver.elementByXpath('//navigationBar/text[contains(@value, "Hi, ")]', function(err, el) {
el.text(function(err, text) {
console.log(text);
driver.quit();
});
});
Ruby:
@driver.find_element :xpath, '//navigationBar/text[contains(@value, "Hi, ")]'
Java:
driver.findElement(By.tagName("button")).sendKeys("Hi");
WebELement element = findElement(By.tagName("button"));
element.sendKeys("Hi");
List<WebElement> elems = findElements(By.tagName("button"));
elems.get(0).sendKeys("Hi");
Python:
driver.find_elements_by_tag_name('tableCell')[5].click()
你也可以通过一行命令来完成元素的查找和交互 (只适用于 IOS)
举个例子, 你可以通过一次调用来实现查找一个元素并点击它, 使用的命令是mobile: findAndAct
Python:
args = {'strategy': 'tag_name', 'selector': 'button', 'action': 'tap'}
driver.execute_script("mobile: findAndAct", args)
Python:
js_snippet = "mobile: swipe"
args = {'startX':0.5, 'startY':0.2, 'startX':0.5, 'startY':0.95, 'tapCount':1, 'duration':10}
driver.execute_script(js_snippet, args)
备注: driver.execute_script() 可以在 Automating Mobile Gestures: Alternative access method) 找到说明
(翻译备注: 这个工具目前只有 Mac 版本, 如果你使用的是 windows, 可以使用 android 自带的 traceview 工具来获得元素的位置)
Appium 提供了一个灵活的工具 Appium Inspector, 允许你在 app 运行的时候, 直接定位你正在关注的元素. 通过 Appium Inspector(靠近 start test 按钮的 i 标示文本), 你可以通过点击预览窗口上的控件来获得它的 name 属性, 或者直接在 UI 导航窗口中定位
Appium Inspector 有一个简单的布局, 全部由如下窗口组成.
UI 导航器, 预览, 录制与刷新按钮, 和交互工具
启动 Appium Inspector 后, (通过点击 app 右上的小"i"按钮), 你可以定位任何预览窗口中的元素. 作为测试, 我正在查找 id 为"show alert"的按钮
要找到这个按钮的 id, 在定位预览窗口中我点击了"show alert"按钮, Appium Inspector 在 UI 导航窗口中高亮显示了这个元素, 然后展示了刚被点击按钮的 id 和元素类型