2016-05-16 126 views
0

我使用XPath是一個Android應用程序:無效的選擇異常,而在醬實驗室運行Appium測試

//android.widget.EditText[contains(@resource-id,'etPass')]

此XPath工作正常,當我在真機或虛擬機在本地運行測試。

但是當我在Sauce Labs上運行相同的測試時,它給了我無效的選擇器異常。

org.openqa.selenium.InvalidSelectorException: 
An error occurred while searching for an element by XPath. (WARNING: 
The server did not provide any stacktrace information) 
Command duration or timeout: 88 milliseconds 
For documentation on this error, please visit: 
http://seleniumhq.org/exceptions/invalid_selector_exception.html 

當我使用XPath與@text而不是@resource-id,它的工作原理。爲什麼Sauce Labs不認可@resource-id作爲查找xpath的有效屬性?

下面是uiautomatorviewer與XML的截圖

UiAutomatorViewer screenshot

+0

你試過// android.widget.EditText [包含(@ id,'etPass')]'這個? –

+0

是的,我試過了。它不考慮條件。 因此'//android.widget.EditText[contains(@id,'etPass')]'與'android.widget.EditText'相同。它只是去屏幕上的第一個EditText元素,恰好是用戶名框,而不是密碼框 – BludShot

+0

@BludShot:請更新與您的代碼塊和appium檢查員屏幕截圖的問題提到的元素,以弄清事情 – nullpointer

回答

0

做正確的方法應使用此:

//android.widget.EditText[contains(@id,'etPass')] //resource-id is not a recognised attribute for selection 

另外,如果你需要具體到選擇單元素使用x路徑:

//android.widget.EditText[@id='etPass'] // = ensures the value match for specified attribute 
+0

但它不起作用。 '//android.widget.EditText[contains(@id,'etPass')]''返回我的用戶名框而不是密碼框,因爲用戶名框是屏幕上的第一個EditText元素。 – BludShot

+0

@BludShot:更新了特定字段的答案 – nullpointer

+0

'//android.widget.EditText[@id='etPass']'也不起作用。 它不會將id視爲屬性。當我使用任何垃圾值而不是id時,會發生同樣的情況,也就是說,它會返回第一個EditText元素 – BludShot

相關問題