Ich verwende den XPather-Browser , um meine XPATH-Ausdrücke auf einer HTML-Seite zu überprüfen.
Mein Endziel ist es, diese Ausdrücke in Selenium zum Testen meiner Benutzeroberflächen zu verwenden.
Ich habe eine HTML-Datei mit einem ähnlichen Inhalt erhalten:
<tr> <td> abc </ td> <td> </ td> </ tr>
Ich möchte einen Knoten mit einem Text auswählen, der die Zeichenfolge "
" enthält.
Mit 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 //td[text()=" "]
, gibt es nichts zurück. Gibt es eine spezielle Regel für Texte mit " &
"?
Antworten:
Es scheint, dass OpenQA , Leute hinter Selenium, dieses Problem bereits angesprochen haben. Sie definierten einige Variablen, um explizit mit Leerzeichen übereinzustimmen. In meinem Fall muss ich einen ähnlichen XPATH verwenden
//td[text()="${nbsp}"]
.Ich habe hier den Text von OpenQA zu diesem Thema wiedergegeben ( hier zu finden ):
quelle
\u00a0
. Was für mich funktionierte, war die Eingabe eines nicht unterbrechenden Leerzeichens auf dem MacAlt+Shift+Space
. Web-Suche sagtAlt+0160
auf Windows.Ich habe festgestellt, dass ich die Übereinstimmung herstellen kann, wenn ich einen fest codierten, nicht unterbrechenden Bereich (U + 00A0) eingebe, indem ich unter Windows Alt + 0160 zwischen den beiden Anführungszeichen eingebe ...
arbeitete für mich mit dem speziellen Char.
Soweit ich weiß, kann der XPath 1.0-Standard keine Unicode-Zeichen maskieren. In XPath 2.0 scheint es Funktionen dafür zu geben, aber es sieht so aus, als würde Firefox dies nicht unterstützen (oder ich habe etwas falsch verstanden). Sie haben also mit lokaler Codepage zu tun. Hässlich, ich weiß.
Eigentlich sieht es so aus, als ob der Standard sich auf die Programmiersprache mit XPath verlässt, um die richtige Unicode-Escape-Sequenz bereitzustellen ... Also habe ich irgendwie das Richtige getan.
quelle
$col = $xpath->query("//p[text()=\"\xC2\xA0\"]");
Versuchen Sie, die dezimale Entität
 
anstelle der benannten Entität zu verwenden. Wenn dies nicht funktioniert, sollten Sie in der Lage sein, das Unicode-Zeichen anstelle der
Entität einfach für ein nicht unterbrechendes Leerzeichen zu verwenden .(Hinweis: Ich habe dies nicht in XPather versucht, aber ich habe es in Oxygen versucht.)
quelle
Beachten Sie, dass ein standardkonformen XML - Prozessor wird alle Entitätsverweise andere als XML fünf Standard diejenigen ersetzt hat (
&
,>
,<
,'
,"
) mit dem entsprechenden Zeichen in der Zielcodierung durch die Zeit , XPath - Ausdrücke ausgewertet werden. Angesichts dieses Verhaltens sind die Vorschläge von PhiLho und jsulak der richtige Weg, wenn Sie mit XML-Tools arbeiten möchten. Wenn Sie 
den XPath-Ausdruck eingeben , sollte er in die entsprechende Bytesequenz konvertiert werden, bevor der XPath-Ausdruck angewendet wird.quelle
Ich kann mit Xpather keine Übereinstimmung erzielen, aber Folgendes funktionierte für mich mit einfachen XML- und XSL-Dateien im XML-Editor von Microsoft:
Der zurückgegebene Wert ist 1, was in meinem Testfall der richtige Wert ist.
Allerdings musste ich nbsp als Entität in meinem XML und XSL wie folgt deklarieren :
Ich bin nicht sicher , ob das hilft dir, aber ich konnte tatsächlich finden nbsp einen XPath - Ausdruck verwendet wird .
Bearbeiten: Mein Codebeispiel enthält tatsächlich die Zeichen '& nbsp;' Das JavaScript-Syntax-Highlight konvertiert es jedoch in das Leerzeichen. Lass dich nicht irreführen!
quelle
Suche nach
oder nurnbsp
- hast du das versucht?quelle
Gemäß dem von Ihnen bereitgestellten HTML:
Um den Knoten mit der Zeichenfolge zu finden
, können Sie eine der folgenden Methoden verwendenxpath basierte Lösungen:Verwenden von
text()
:Verwenden von
contains()
:Idealerweise möchten Sie jedoch den NO-BREAK SPACE- Charakter vermeiden und eine der folgenden Locator-Strategien verwenden :
Verwenden des übergeordneten
<tr>
Knotens undfollowing-sibling
:Verwenden von
starts-with()
:Verwenden des vorhergehenden
<td>
Knotens und desfollowing
node and
folgenden Geschwisters`:Referenz
Eine relevante ausführliche Diskussion finden Sie in:
Selen enthälttl; DR
Unicode-Zeichen 'NO-BREAK SPACE' (U + 00A0)
quelle
Sie können XPath Contains, Sibling, Ancestor Functions in Selenium WebDriver verwenden, um Elemente zu suchen, die keine eindeutigen Eigenschaften aufweisen, die identifiziert werden können.
Weitere Informationen finden Sie auf dieser Seite: https://www.guru99.com/using-contains-sbiling-ancestor-to-find-element-in-selenium.html
quelle