在软件测试中,测试人员可以用 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”获取页面的布局代码。
搜索微信公众号:TestingStudio 霍格沃兹的干货都很硬核
评论