it-swarm.com.de

Was ist der Unterschied zwischen .// und // * in XPath?

Beim Finden des relativen XPath über Firebug: erstellt es wie 

  1. .//*[@id='Passwd']--------- Was passiert, wenn wir dot am Anfang nicht verwenden, was er bedeutet?

  2. 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']

15
TEST-M

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 .

18
zx485

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.
29
kjhughes

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.

2
alecxe
  1. Für die erste Frage: Es geht nur um den Kontext. Sie können Syntax sehen, um zu wissen, was '.', '..' usw. bedeutet. Ich wette, Sie werden keine bessere Erklärung finden als This Link .
  2. Vereinfachte Antwort für die zweite Frage: Knoten finden Sie im Allgemeinen mit den HTML-Tags wie td, a, li, div usw. Aber "*" bedeutet, jedes Tag zu finden, das Ihrer angegebenen Eigenschaft entspricht. Es wird meistens verwendet, wenn Sie sich über eine bestimmte Eigenschaft sicher sind, aber nicht über das Tag, in dem das Element enthalten sein könnte. Angenommen, ich möchte eine Liste aller Elemente mit der ID 'xyz' in einem beliebigen Tag.

Ich hoffe es hilft :)

1
Prateek