天天看點

軟體測試 | 元素定位方式與隐式等待

作者:霍格沃茲測試

元素定位是UI自動化測試中最關鍵的一步,假如在自動化測試中沒有定位到頁面中的元素,也就無法完成對頁面的測試操作。那麼,我們在自動化測試中如何定位到想要的頁面元素呢?下面介紹用Appium定位元素的方式。

1.Appium定位元素的方式

定位頁面元素有很多種方式,例如,可以通過ID、accessibility_id、XPath等方式進行頁面元素的定位,也可以使用Android和iOS提供的定位方式實作頁面元素的定位,具體如表5-3所示。

定位方式 描述
Accessibility ID 識别一個UI元素,對于XCUITest引擎,它對應的屬性名是’accessibility_id‘,對于Android系統的頁面元素,它對應的屬性名是’content-desc‘
Class name 對于一個iOS系統,它的class屬性對應的屬性值會以’XCUIElementType‘開頭,對于Android系統,它對應的是UiAutomator2的class屬性(e.g.: android.widget.TextView)
ID 原生元素的辨別符,Android系統對應的屬性名為’resource-id‘,ios為'name'
Name 元素的名稱
XPath 使用XPath表達式查找頁面所對應的XML的路徑(不推薦,存在性能問題)
Image 通過比對base 64編碼的圖像檔案定位元素
Android UiAutomator (UiAutomator2 only) 通過UiAutomator提供的API,尤其是UiSelector類來定位,在Appium中,會将Java代碼作為字元串發送到伺服器,伺服器在應用程式的環境中執行這段代碼,并傳回一個或多個元素
Android View Tag(Espresso only) 使用view tag定位元素
Android Data Matcher(Espresso only) 使用Espresso資料比對器定位元素

2.隐式等待

隐式古代是一種全局等待方式。設定了隐式等待時長,實際上是對頁面中的所有查找元素的方法設定了加載時長,如果查找時間超出了設定時間則抛出異常。

假如在測試腳本中設定了隐式等待時長為10秒,測試腳本會在10秒内不停地執行查找頁面元素的操作,如果在第2秒就找到了需要的元素,就停止查找且繼續執行後面的測試代碼,如果查找時間超出了設定時間,則測試代碼抛出異常。

一旦在測試代碼中設定了隐式等待,則隐式等待就會存在整個WebDriver對象執行個體的聲明周期中,例如,元素定位的測試代碼每次調用find_element或者find_eleniumts方法是時候,就會自動茶法隐式等待。

測試的實踐證明,隐式等待比強制等待更加隻能,後者隻能選擇一個固定的時間等待,前者可以在一個時間範圍内智能地等待。

隐式等待的示範代碼如下(Python版和Java版)。

Python版本

...
self.driver = webdriver.Remote(server, desired_caps)
self.driver.implicitly_wait(15)
...           

Java版本

...
driver = new Androidver(remoteUrl,desiredCapabilites);
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
...           

執行上面的代碼,會得到下面的日志資訊(注意:下面的xx和xxy是元素ID屬性的簡寫):

[W3C] Matched W3C error code 'no such element' to NoSuchElementError
[BaseDriver] Waited for 1495 ms so far
[WD Proxy] Matched '/element' to command name 'findElement'
……
[W3C] Matched W3C error code 'no such element' to NoSuchElementError
[BaseDriver] Waited for 2707 ms so far
[WD Proxy] Matched '/element' to command name 'findElement'
……
[HTTP] <-- POST /wd/hub/session/xx/element 200 6653 ms - 137
[HTTP]
[HTTP] --> POST /wd/hub/session/xx/element/xxy/click
[HTTP] {"id":"xxy"}           

從上述日志上可以看出,我們使用Appium進行元素查找的時候,查找失敗後程式不會直接抛出異常停止測試腳本執行,而是每過一段時間去查找一次元素。上面的例子所示,在6.7秒左右查到了元素,此時結束等待,去執行點選操作。

搜尋微信公衆号:TestingStudio霍格沃茲的幹貨都很硬核