Appium 提供了大量的 API 去操作页面及页面上的节点,比如点击、输入、滑动等。
常用操作
点击操作
通常获取到元素之后,可以调用 click()
方法来实现对这个元素的点击操作。示例代码如下:
driver.find_element_by_id("home_search").click()
复制代码
driver.findElementById("home_search").click();
复制代码
输入操作
输入操作示例代码如下:
self.driver.find_element_by_id("search_input_text").send_keys("阿里巴巴")
复制代码
driver.findElementById("search_input_text").sendKeys("阿里巴巴");
复制代码
效果展示:
获取元素属性
通过获取到的元素属性信息,可以进行页面数据的验证(断言),或者用于分支判断。
元素有很多属性信息,无论是使用 uiautomatorviewer 还是使用 Appium Inspector,元素的属性信息一般都会展示在页面的右下方。
如下图是 Appium Inspector 的元素定位页面:
可以使用获取元素的属性的方法来获取这些属性信息。然后通过获取到的元素属性值进行断言,也可以获取到复选框是否被选中的状态,或者获取某个元素是否可用等信息。
获取 TEXT 属性
返回元素的 text 的属性值,用法如下:
self.driver.find_element_by_xpath(
'//*[@resource-id="com.xueqiu.android'
).get_attribute('text')
复制代码
driver.findElementByXPath\
"//*[@resource-id=\"com.xueqiu.android\"]").\
getAttribute("text");
复制代码
获取 CLASS 属性
返回元素的 class 的属性值,用法如下:
self.driver.find_element_by_xpath(
'//*[@resource-id="com.xueqiu.android"]'
).get_attribute('class')
复制代码
driver.findElementByXPath("\
//*[@resource-id=\"com.xueqiu.android\"]")\
.getAttribute("class");
复制代码
获取 RESOURCE-ID 属性
返回 resource-id 的属性值(API≥18 支持),用法如下:
self.driver.find_element_by_xpath(
'//*[@resource-id="com.xueqiu.android"]'
).get_attribute('resource-id')
复制代码
driver.findElementByXPath\
("//*[@resource-id=\"com.xueqiu.android\"]")\
.getAttribute("resource-id");
复制代码
获取 CONTENT-DESC 属性
返回元素的 content-desc 的属性值,用法如下:
self.driver.find_element_by_xpath(
'//*[@resource-id="com.xueqiu.android'
).get_attribute('content-desc')
复制代码
driver.findElementByXPath\
("//*[@resource-id=\"com.xueqiu.android\"]")\
.getAttribute("content-desc");
复制代码
获取元素的其它属性
也可以获取到元素的一些其它的属性,比如这个元素是否可见,是否被选中,是否可用等,下面介绍这些属性值的获取:
get_attribute('clickable') # 是否可点击
get_attribute('checked') # 是否被选中
get_attribute('displayed') # 是否显示
get_attribute('enabled') # 是否可用
复制代码
getAttribute("clickable"); // 是否可点击
getAttribute("checked"); //是否被选中
getAttribute("displayed"); // 是否显示
getAttribute("enabled"); // 是否可用
复制代码
获取页面的 XML 结构
获取页面的 XML 结构,大部分情况是用于页面数据的验证。另外也可以通过分析页面的结构,辅助定位问题。
通过 driver.page_source
可以获取页面的 XML 结构。与 Selenium 输出的 HTML 格式不一样,Appium 的 page_source 是 XML 格式。
示例代码如下:
PYTHON 版本
from appium import webdriver
...
def test_search(self):
# 点击搜索
self.driver.find_element_by_id(
"com.xueqiu.android:id/tv_search").click()
# 输入内容“alibaba”
self.driver.find_element_by_id(
"com.xueqiu.android:id/search_input_text").send_keys("alibaba")
# 打印输出 class 属性
print(self.driver.find_element_by_xpath(
'//*[@resource-id="com.xueqiu.android')
.get_attribute('class'))
# 打印输出页面源码
print(self.driver.page_source)
...
复制代码
JAVA 版本
import io.appium.java_client.android.AndroidDriver;
...
@Test
public void searchTest(){
// 点击搜索
driver.findElement(By.id("com.xueqiu.android:id/tv_search")).click();
// 输入内容“alibaba”
driver.findElement(By.id("com.xueqiu.android:id/search_input_text"))\
.sendKeys("alibaba");
// 打印输出 class 属性
System.out.println(driver.findElementByXPath(\
"//*[@resource-id=\"com.xueqiu.android\"]").getAttribute("class"));
// 打印输出页面源码
System.out.println(driver.getPageSource());
}
...
复制代码
上面的代码创建了一个测试方法,先定位到搜索框,向搜索框中输入内容,通过获取属性方法获取到搜索结果的 class 属性,最后获取页面的布局源码。
评论