在软件测试中,测试人员可以用Appium提供的大量的API去操作App页面及App页面上的节点,如点击、输入、滑动等操作。
1.常用的测试操作
(1)点击操作
在软件测试中,我们通常先获取到元素,然后通过测试脚本调用click()方法来实现对这个元素的点击操作。示例diamante如下(Python版和Java版)。
Python版本
driver.find_element_by_id("home_search").click()
Java版本
driver.findElementById("home_search").click();
(2)输入操作
测试使用的输入操作示例代码如下(Python版和Java版)。
Python版本
self.driver.find_element_by__id("search_input_text").send_keys("阿里巴巴")
Java版本
driver.findElementById("search_input_text").sendKeys("阿里巴巴");
效果展示如图5-16所示。
(3)获取元素属性
我们进行软件测试时,通过获取到的元素属性信息,可以进行页面数据的验证(断言),或者用于分支判断。
元素有很多属性信心,无论是使用UiAutomator还是使用Appium Inspector,获取到的元素属性信息一般都会展示在页面的右下方。
图5-17是使用Appium Inspector获取到的元素属性信息。
我们在测试中可以使用获取App页面元素属性的方法来货物一些元素的属性信息。然后通过获取到的元素属性值进行断言,这样也可以获取到复选框是否被选中,或者获取到页面中某个元素是否可用等信息。
1)获取元素的text属性
获取元素的text属性值的代码如下(python版和Java版)。
Python版本
self.driver.find_element_by_xpath( '//*[@resource-id="com.xueqiu.android "] ').get_attribute('text')
Java版本
driver.findElementByXPath\ "//*[@resource-id=\"com.xueqiu.android\"]".\ getAttribute("text")
2)获取元素的class属性
获取元素的class属性的代码如下(Python版和Java版)。
Python版本
self.driver.find_element_by_xpath( '//*[@resource-id="com.xueqiu.android"]' ). get_attribute('class')
Java版
driver.findElementByXPath("\ //*[@resourse-id=\"com.xueqiu.android\"]"\ .getAttribute(class));
3)获取resource-id属性
获取元素的resource-id属性(API≥18支持)的代码如下(Python版和Java版)。
Python版本
self.driver.find_element_by_xpath( '//*[@resoutce-id="com.xueqiu.android"]' ).get_attribute('resource-id')
Java版本
driver.findElementByXPath\ ("//*[@resource-id\"com.xueqiu.android\"]"\ .getAttribute("resource-id"));
4)获取content-desc属性
获取元素 的content-desc属性的代码如下(Python版和Java版)。
Python版本
self.driver.find_element_by_xpath( '//*[@resource-id=com.xueqiu.android]' ).get_attribute('content-desc')
Java版本
driver.findElementByXPath\ ("//*[@resource-id=\"com.xueqiu.android\"]")\ .getAttribute("content-desc");
5)获取元素的其他属性
在测试中,我们也可以获取App页面元素的一些其他属性,通过元素的属性判断元素的状态,如某个元素是否可见、是否被选中、是否可用等,下面会介绍获取其他属性的演示代码(Python版和Java版)。
Python版
get_attribute('clickable') #是否可点击 get_attribute('checked') #是否被选中 get_attribute('displayed') #是否显示 get_attribute('enabled') #是否可用
Java版本
getAttribute('clickable'); #是否可点击 getAttribute('checked'); #是否被选中 getAttribute('displayed'); #是否显示 getAttribute('enabled'); #是否可用
2.获取页面的XML结构
在测试中,我们获取页面的XML结构目的是用于页面数据的验证。另外,也可以通过分析页面的XML结构,辅助解决页面元素的定位问题。
通过使用driver.page_source可用获取页面的XML结构。
注:用Selenium获取的页面结构是HTML格式,Appium使用page_sourse方法获取的页面结构是XML格式。
示例代码如下(Python版和Java版)。
(1)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_sourse) ...
(2)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.printIn(driver.findElementByXPath(\ "//*[@resource-id=\"com.xueqiu.android\"]").getAttribute("class")); //打印输出页面源代码 System.out.printIn(driver.getPageSource()); } ...
上面的代码创建了一个测试方法,这个方法定位到页面的搜索框,然后向搜索框中输入内容。以Python代码为例,通过方法“get_attribute('class')"获取到 “搜索框” 这个元素的class属性,最后通过 “ page_source”获取页面的布局代码。