Wie Sie XPATH verwenden, um die Suche für ein span mit einer Klasse für Selenium-Tests in JAVA
Arbeite ich an einem Stück code, das will mir wählen Sie den span mit der Klasse amountCharged
und erhalten den Wert der Spannweite, um es zu testen gegen mock-Wert. Das problem, das ich bin vor ist, ich kann nicht scheinen, um zu wählen, dass span
mit XPath
. Ich habe versucht, mehrere Möglichkeiten, und immer noch nicht, ich ging auf W3Schools und Stackoverflow Fragen, aber nicht in der Lage war, den Nagel syntax.
Unten ist der Fehler, das ich mich vor:
org.openqa.selenium.TimeoutException: Timed out after 60 seconds waiting for text ('£163.06') to be present in element found by `By.xpath:`
//span[contains(@class, 'amountCharged')]
Wie Sie sehen können ich bin versucht, //span[contains(@class,'amountCharged')]
als XPATH
gleiche Problem mit der Verwendung von "
/descendant::span[contains(@class, 'amountCharged')]
DEN HTML-AUSGEHEND VON EINEM ÜBERGEORDNETEN DIV IST:
<div class="panelMessage instructional" params=""> Total:
<span class="amountCharged">£163.06</span> quoted on
<span class="reservationTime">Tue, 29 Nov 2011 15:46 GMT</span> . </div>
</div>
<div class="panelContent hideFocus noneBlock " tabindex="-1" data- context="panelContent">
Den JAVA-code ist:
private static void elementShouldContain(String locator, String value, String errorMessage, long timeout) {
String xpath = buildLocator(locator, "");
WebDriverWait customWait = new WebDriverWait(webDriverInstance, timeout / 1000);
try {
customWait.until(ExpectedConditions.textToBePresentInElement(By.xpath(xpath), value));
} catch (Exception e) {
//Handles the specific exception, except that the message is null, in which case throws a regular SeleniumException
if (errorMessage != null)
throw new CustomSeleniumException(errorMessage, e);
else
throw new SeleniumException(e);
}
}
was bin ich bitte um Hilfe.
Danke
- Es wäre gut, um zu zeigen Sie den HTML-von dem Ihr XPath bestimmt ist, zu wählen.
- deine Fehlermeldung zeigt an, dass es nicht finden können, die bestimmten text, aber es funktioniert, suchen Sie nach dem element
- Ich habe eingefügt, den HTML-und den text 163.06 ist es
- Gibt es mehr Elemente mit
amountCharged
Namen präsentieren? - Nein, in der gesamten HTML-es ist nur ein span mit der Klasse. Und es wählt die Spannweite, wenn ich es über chrome reg x checker
- Und ich möchte, um zu sehen, wie man den text als gut. Also was verwenden Sie, um die
span
text - /descendant::span[contains(@class, 'amountCharged')]/text()[last()] ich habe versucht, diese und verglich es mit einem hard-codierten String "£163.06"
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fehler, die Sie erwähnt haben, ich nehme an, Sie sind mit textToBePresentInElement oder textToBePresentInElementLocated oder etwas Verwandte Methode unter der ExpectedConditions Klasse.
Alternativ können Sie dies tun:
1 - Warten, bis die Sichtbarkeit des Elements mit Explizite Warten
2 - Abrufen des Textes
3 - Bestätigen/Vergleichen Sie den text mit dem Wert: '£163.06'.
Können Sie versuchen, die folgenden code, das aus allen oben um:
[ODER Sie geltend machen kann, die Werte statt vergleichen Sie mit der Assert-Klasse durch Import import junit.Rahmen.Geltend machen;]
Paar Dinge vor Augen halten:
xpath
auf Chrome-debugger von Firebug bedeutet nicht unbedingt, dass dieselector
ist wieder das Ziel-element eindeutig. Möglicherweise gibt es einige andere Elemente, die versteckt mit dem gleichen Selektor undwebdriver
wird nicht zu den target-element in diesem Fall. Für debugging-Zwecke verwendenfindElements
zu sehen, wie viele Elemente es gibt.Versuchen Sie folgenden
xpaths
Wenn die Klasse nicht eindeutig, und Sie wollen zu finden, die
span
je nach dem div-Element können Sie Folgendes tun:stacktrace
bekommen Sie dann