Beim Finden des relativen XPath über Firebug: erstellt es wie
.//*[@id='Passwd']
--------- Was passiert, wenn wir dot am Anfang nicht verwenden, was er bedeutet?
Fügen Sie einfach //*
in die Xpath --it-Hervorhebungen --- verschiedene Seitenelemente ---------- Was bedeutet es?
Nachfolgend finden Sie XPaths für Google Mail-Kennwortfelder. Was ist die Bedeutung von *
?
.//*[@id='Passwd']
//child::input[@type='password']
Diese Ausdrücke wählen verschiedene Knotensätze aus:
.//*[@id='Passwd ']
Das '.' am Anfang bedeutet, dass die aktuelle Verarbeitung am aktuellen Knoten beginnt. Das '*' wählt alle Elementknoten aus, die von diesem aktuellen Knoten absteigen, wobei der @id
- Attributwert 'Passwd' ist.
Was ist, wenn wir dot am Anfang nicht verwenden, was es bedeutet?
Dann würden Sie alle Elementknoten auswählen, deren @id
- Attribut-Wert gleich 'Passwd' im Dokument whole ist.
Fügen Sie einfach // * in den XPath ein - es werden verschiedene Seitenelemente hervorgehoben
Dadurch werden alle Elementknoten im Dokument whole ausgewählt.
Nachfolgend erwähnt: XPatht's für Gmail-Passwort-Feld stimmt mit der Bedeutung von * überein?
.//*[@id='Passwd']
Dies würde alle vom aktuellen Knoten absteigenden Elementknoten auswählen, deren @id
- Attributwert gleich 'Passwd' ist.
// child :: input [@ type = 'password']
Dies würde alle untergeordneten Elementknoten mit dem Namen input
auswählen, deren @type
- Attributwerte gleich 'password' sind. Das child::
-Achsenpräfix kann weggelassen werden, da dies das Standardverhalten ist.
Die Syntax für die Auswahl des entsprechenden Ausdrucks wird erklärt hier bei w3school.com .
Und die Achsen (aktueller Punkt in Bearbeitung) werden erklärt hier auf einer anderen w3school.com-Seite .
Hier gibt es verschiedene, wichtige XPath-Konzepte ...
Absolute vs. relative XPaths (/
vs .
)
/
führt einen absoluten Standortpfad ein, der am Stamm des Dokuments beginnt..
führt einen relativen Standortpfad ein, der am Kontextknoten beginnt. Benanntes Element gegen ein beliebiges Element (ename
vs *
)
/ename
wählt ein ename
-Wurzelelement aus ./ename
wählt alle ename
untergeordneten Elemente des aktuellen Knotens aus./*
wählt das Wurzelelement unabhängig vom Namen ..__ aus../*
oder *
wählt alle untergeordneten Elemente des Kontextknotens aus, unabhängig vom Namen. Nachkomme-oder-Selbstachse (//*
)
//ename
wählt alle ename
-Elemente in einem Dokument aus ..//ename
wählt alle ename
-Elemente am oder unterhalb des Kontextknotens aus.//*
wählt alle Elemente in einem Dokument aus, unabhängig vom Namen ..//*
wählt alle Elemente unabhängig vom Namen am oder unterhalb des Kontextknotens aus.Mit diesen Konzepten im Hinterkopf erhalten Sie Antworten auf Ihre spezifischen Fragen ...
.//*[@id='Passwd']
bedeutet, dass alle Elemente am oder unterhalb des aktuellen Kontextknotens ausgewählt werden sollen, deren id
-Attributwert gleich 'Passwd'
ist.//child::input[@type='password']
kann zu //input[@type='password']
vereinfacht werden und bedeutet, alle input
-Elemente auszuwählenim Dokument, die einen type
-Attributwert haben, der 'password'
entspricht.Der Punkt in XPath wird als "Kontextelementausdruck" bezeichnet. Wenn Sie einen Punkt an den Anfang des Ausdrucks setzen, wird er kontextspezifisch. Mit anderen Worten, es würde das Element mit id="Passwd"
im Kontext des Knotens durchsuchen, auf dem Sie die Methode "find element by XPath" aufrufen.
Der *
im .//*[@id='Passwd']
hilft, jedes Element mit id='Passwd'
abzugleichen.
Ich hoffe es hilft :)