Frage

ich benutze Xpather Browser So überprüfen Sie meine XPath -Ausdrücke auf einer HTML -Seite.

Mein Endziel ist es, diese Ausdrücke in Selen für die Prüfung meiner Benutzeroberflächen zu verwenden.

Ich habe eine HTML -Datei mit einem ähnlichen Inhalt wie folgt:

<tr>
  <td>abc</td>
  <td>&nbsp;</td>
</tr>

Ich möchte einen Knoten mit einem Text auswählen, der die Zeichenfolge enthält.&nbsp;".

Bei einer normalen Zeichenfolge wie "ABC" gibt es kein Problem. Ich benutze einen XPath ähnlich wie //td[text()="abc"].

Wenn ich es mit einem Xpath versuche wie //td[text()="&nbsp;"] Es gibt nichts zurück. Gibt es eine besondere Regel über Texte mit "&" ?

War es hilfreich?

Lösung

Es scheint, dass OpenQA, Jungs hinter Selen, haben dieses Problem bereits angesprochen. Sie definierten einige Variablen, um den Whitespaces explizit übereinstimmen. In meinem Fall muss ich einen ähnlichen XPath verwenden wie //td[text()="${nbsp}"].

Ich habe hier den Text von OpenQA in Bezug auf dieses Problem reproduziert (gefunden hier):

HTML normalisiert die Whitespace in Elementen automatisch, ignoriert führende/nachverfolgende Räume und wandelt zusätzliche Räume, Laschen und Neulinge in einen einzelnen Raum um. Wenn Selen über die Seite des Textes heraus liest, versucht es, dieses Verhalten zu duplizieren, sodass Sie alle Registerkarten und Neulinge in Ihrem HTML ignorieren und Behauptungen ausführen können, basierend darauf, wie der Text im Browser aussieht, wenn sie gerendert werden. Wir tun dies, indem wir alle nicht sichtbaren Whitespace (einschließlich des nicht sprechenden Raums "ersetzen.&nbsp;") mit einem einzigen Raum. Alle sichtbaren Neulinge (<br>, <p>, und <pre> Formatierte neue Linien) sollten erhalten werden.

Wir verwenden dieselbe Normalisierungslogik für den Text von HTML -Selenese -Test -Falltabellen. Dies hat eine Reihe von Vorteilen. Zunächst müssen Sie sich die HTML -Quelle der Seite nicht ansehen, um herauszufinden, wie Ihre Behauptungen aussehen sollen. "&nbsp;"Symbole sind für den Endbenutzer unsichtbar, und Sie sollten sich beim Schreiben von Selenese -Tests keine Sorgen machen müssen. (Sie müssen nicht setzen."&nbsp;"Markierungen in Ihrem Testfall, um auf einem Feld zu assen, das enthält"&nbsp;".) Sie können auch zusätzliche Neulinien und Räume in Ihre Selenese legen <td> Stichworte; Da wir die gleiche Normalisierungslogik für den Testfall wie im Text verwenden, können wir sicherstellen, dass die Behauptungen und der extrahierte Text genau übereinstimmen.

Dies schafft ein bisschen Problem bei diesen seltenen Gelegenheiten, wenn Sie wirklich zusätzliche Whitespace in Ihren Testfall einfügen möchten/müssen. Zum Beispiel müssen Sie möglicherweise Text in ein Feld wie folgt eingeben: "foo ". Aber wenn du einfach schreibst <td>foo </td> In Ihrem Selenese -Testfall ersetzen wir Ihre zusätzlichen Räume durch nur einen Raum.

Dieses Problem hat eine einfache Problemumgehung. Wir haben eine Variable in Selenese definiert, ${space}, dessen Wert ein einzelner Raum ist. Sie können verwenden ${space} So fügen Sie einen Speicherplatz ein, der nicht automatisch abgeschnitten wird, wie folgt: <td>foo${space}${space}${space}</td>. Wir haben auch eine Variable aufgenommen ${nbsp}, mit dem Sie einen nicht bahnbrechenden Raum einfügen können.

Beachten Sie, dass XPaths dies tun nicht Normalisieren Sie die Whitespace so, wie wir es tun. Wenn Sie einen XPath schreiben müssen wie //div[text()="hello world"] Aber das HTML des Links ist wirklich "hello&nbsp;world"Sie müssen eine echte einfügen"&nbsp;"In Ihren Selenese -Testfall, damit er übereinstimmt, wie folgt: //div[text()="hello${nbsp}world"].

Andere Tipps

Ich habe festgestellt, dass ich das Übereinstimmung machen kann, wenn ich einen hart codierten, nicht sprechenden Raum (U+00A0) eingehe, indem ich zwischen den beiden Zitaten Alt+0160 unter Windows eingeben ...

//table[@id='TableID']//td[text()=' ']

arbeitete für mich mit dem besonderen Char.

Nach dem, was ich verstanden habe, handelt der XPath 1.0 -Standard nicht mit der Flucht von Unicode -Chars. Es scheint Funktionen für das in XPath 2.0 zu geben, aber es sieht so aus, als ob Firefox es nicht unterstützt (oder ich habe etwas missverstanden). Sie haben also mit lokaler Codepage zu tun. Hässlich, ich weiß.

Tatsächlich sieht es so aus, als würde sich der Standard auf die Programmiersprache angewiesen, indem er XPath die richtige Unicode -Fluchtsequenz bereitstellt ... also irgendwie habe ich das Richtige getan.

Versuchen Sie, die Dezimalentität zu verwenden &#160; anstelle der benannten Entität. Wenn das nicht funktioniert, sollten Sie einfach die verwenden können Unicode-Charakter für einen nicht bahnbrechenden Raum anstelle von &nbsp; Einheit.

(Hinweis: Ich habe es in Xpather nicht versucht, aber ich habe es in Sauerstoff versucht.)

Denken Sie daran, dass ein Standard-XML-Prozessor alle anderen als XML-Fünf-Standard-Referenzen ersetzt hat (fünf Standardreferenzen (XML&amp;, &gt;, &lt;, &apos;, &quot;) mit dem entsprechenden Zeichen in der Zielcodierung durch die Zeit, in der XPath -Ausdrücke bewertet werden. Angesichts dieses Verhaltens sind die Vorschläge von Philho und Jsulak der richtige Weg, wenn Sie mit XML -Tools arbeiten möchten. Wenn Du eintrittst &#160; Im XPath -Ausdruck sollte es in die entsprechende Byte -Sequenz konvertiert werden, bevor der XPath -Ausdruck angewendet wird.

Ich kann mit Xpather keine Übereinstimmung erhalten, aber das folgende hat für mich mit einfachen XML- und XSL -Dateien in Microsofts XML -Notizblocke funktioniert:

<xsl:value-of select="count(//td[text()='&nbsp;'])" />

Der zurückgegebene Wert beträgt 1, was in meinem Testfall der richtige Wert ist.

Ich musste jedoch erklären NBSP Als Entität innerhalb meines XML und XSL unter Verwendung der folgenden:

<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#160;"> ]>

Ich bin mir nicht sicher, ob das dir hilft, aber ich konnte es in der Lage eigentlich finden NBSP Verwenden eines XPath -Ausdrucks.

Bearbeiten: Mein Code -Beispiel enthält tatsächlich die Zeichen '' ' Die JavaScript -Syntax -Highlight wandelt sie jedoch in den Raumschiff um. Sei nicht irreführend!

Suchen nach &nbsp; oder nur nbsp - Hast du das versucht?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top