技術分享 | app自動化測試(Android)--App 控制項交互

  • 2022 年 6 月 14 日
  • 筆記

原文鏈接

常用操作

點擊操作

通常獲取到元素之後,可以調用 click() 方法來實現對這個元素的點擊操作。示例程式碼如下:

  • python 版本
driver.find_element_by_id("home_search").click()

  • Java 版本
driver.findElementById("home_search").click();

輸入操作

輸入操作示例程式碼如下:

  • python 版本
self.driver.find_element_by_id("search_input_text").send_keys("阿里巴巴")

  • Java 版本
driver.findElementById("search_input_text").sendKeys("阿里巴巴");

效果展示:

獲取元素屬性

通過獲取到的元素屬性資訊,可以進行頁面數據的驗證(斷言),或者用於分支判斷。

元素有很多屬性資訊,無論是使用 uiautomatorviewer 還是使用 Appium Inspector,元素的屬性資訊一般都會展示在頁面的右下方。

如下圖是 Appium Inspector 的元素定位頁面:

可以使用獲取元素的屬性的方法來獲取這些屬性資訊。然後通過獲取到的元素屬性值進行斷言,也可以獲取到複選框是否被選中的狀態,或者獲取某個元素是否可用等資訊。

獲取 TEXT 屬性

返回元素的 text 的屬性值,用法如下:

  • 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");

獲取 CLASS 屬性

返回元素的 class 的屬性值,用法如下:

  • Python 版本
self.driver.find_element_by_xpath(
    '//*[@resource-id="com.xueqiu.android"]'
    ).get_attribute('class')

  • Java 版本
driver.findElementByXPath("\
    //*[@resource-id=\"com.xueqiu.android\"]")\
    .getAttribute("class");

獲取 RESOURCE-ID 屬性

返回 resource-id 的屬性值(API≥18 支援),用法如下:

  • Python 版本
self.driver.find_element_by_xpath(
    '//*[@resource-id="com.xueqiu.android"]'
    ).get_attribute('resource-id')

  • Java 版本
driver.findElementByXPath\
    ("//*[@resource-id=\"com.xueqiu.android\"]")\
    .getAttribute("resource-id");

獲取 CONTENT-DESC 屬性

返回元素的 content-desc 的屬性值,用法如下:

  • 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");

獲取元素的其它屬性

也可以獲取到元素的一些其它的屬性,比如這個元素是否可見,是否被選中,是否可用等,下面介紹這些屬性值的獲取:

  • python 版本
get_attribute('clickable') # 是否可點擊
get_attribute('checked') # 是否被選中
get_attribute('displayed') # 是否顯示
get_attribute('enabled') # 是否可用

  • Java 版本
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 屬性,最後獲取頁面的布局源碼。

⬇️ 你好呀,喜歡這篇文章的話煩請點個「贊」哦!大家的支援很重要~(▽) PS:有問題可以聯繫我們哦~v ceshiren001

>>更多技術文章分享和免費資料領取

Tags: