2016-05-16 13 views
0

XPath ich verwende ist für einen Android-App:Ungültige Wahl Ausnahme während der Ausführung Appium Tests an Sauce Labs

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

Diese XPath funktionieren gut, wenn ich den Test lokal auf reales Gerät oder VM laufen.

Aber wenn ich den gleichen Test auf Sauce Labs führe, gibt es mir ungültige Auswahl Ausnahme.

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 

Wenn ich XPath mit @text statt @resource-id, es funktioniert. Warum erkennt Sauce Labs @resource-id nicht als gültiges Attribut zum Auffinden von xpath?

Unten ist der Screenshot von uiautomatorviewer mit xml

UiAutomatorViewer screenshot

+0

Haben Sie versucht '' // android.widget.EditText [enthält (@ id, 'etPass')] das? –

+0

Ja, ich habe es versucht. Es berücksichtigt nicht die Bedingung. So '' android.widget.EditText[contains(@id,'etPass ')] 'ist das selbe wie' // android.widget.EditText'. Es geht nur zum ersten EditText-Element auf dem Bildschirm, die zufällig ist Benutzername Box, nicht Passwort-Box – BludShot

+0

@BludShot: Bitte aktualisieren Sie die Frage mit Ihrem Code-Block und Appium Inspector Screenshot für die genannten Elemente, um die Dinge klar zu machen – nullpointer

Antwort

0

Der richtige Weg, es zu tun gilt diese werden:

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

Auch, wenn Sie auf die Auswahl ein spezifisch sein müssen Einzelelement mit X-Pfad:

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

aktualisiert, aber es funktioniert nicht. '//android.widget.EditText[contains(@id,'etPass ')]' gibt mir das Feld Benutzername statt Passwort zurück, weil das Feld Benutzername das erste EditText-Element auf dem Bildschirm ist. – BludShot

+0

@BludShot: aktualisiert die Antwort für ein bestimmtes Feld – nullpointer

+0

'//android.widget.EditText[@id='etPass ']' funktioniert auch nicht. Es wird ID nicht als Attribut betrachtet. Das Gleiche passiert, wenn ich anstelle von id irgendeinen Garbage-Wert verwende, das heißt, er gibt mir das erste EditText-Element zurück – BludShot