Frage

Ist es möglich, Selen, alle Elemente zu bewerten, die einen bestimmten XPath entsprechen kann?

Zum Beispiel, würde Ich mag zu prüfen, ob alle Kontrollkästchen sind mit //input[type='checkbox'] geprüft -. Problem ist, ich kehrte nur ein Element erhalten

War es hilfreich?

Lösung

Sie können den getXpathCount Befehl verwenden, um die Anzahl der passenden Elemente zu bestimmen. Sie können dann die Schleife durch sie mit einem Zuwachs um jedes Element einzeln zu lokalisieren. Das folgende Java (TestNG / JUnit) Beispiel würde prüfen, ob alle Kontrollkästchen auf einer Seite geprüft:

int totalCheckboxes = session().getXpathCount("//input[@type='checkbox']").intValue();
for (int i = 1; i < totalCheckboxes+1; i++) {
    assertTrue(session().isChecked("//input[@type='checkbox'][" + i + "]"));
}

Andere Tipps

habe ich versucht, den oben beschriebenen Ansatz und Selen Ausnahmen wirft das Element nicht Präfix XPath found.Adding = behob das Problem.

Beispiel

xpath=(//td[@class='cell name bold'])[1]
xpath=(//td[@class='cell name bold'])[2] 

Mit

/descendant::input[@type='text'][1]
/descendant::input[@type='text'][2]

Sie können nur für alle Eingabeelemente im Baum. Es wird nicht funktionieren, wenn Sie nur einen Teilbaum analysieren möchten.

Ein besserer Weg ist:

(/form/div/input[@type='text'])[1]
(/form/div/input[@type='text'])[2]

die Folge # 1, # 2 usw. des XPath-Ausdrucks in den Klammern angezeigt werden kann.

Natürlich können Sie auch tun

(//input[@type='text'])[1]

Das ist ganz praktisch ist, wie Selen nur das erste Spiel verwendet und kann nicht mit einer Ergebnismenge umgehen, das ist, was XPath in der Regel zurück.

Es gibt keine Möglichkeit Selen eine Liste der Elemente durch einen Lokator zurück auswerten konnte. Es greift nur die ersten und tut es Sachen mit ihm.

Dave Antwort ist die beste Alternative für das, was Sie suchen.

Ich versuche, die genau die gleiche Sache in Selen zu tun und versuchte mit @ dave-Jagd ‚s Beispiel, aber es ist eine falsche Methode für ein einzelnes Element in einer Sammlung zu finden.

Betrachten Sie das folgende Beispiel:

<form>
 <div>
  <input type="text" name="field1" />
 </div>
 <div>
  <input type="text" name="field2" />
 </div>
</form>

Wenn Sie einen Ausdruck wie:

//input[@type='text'][1]

Dies wird alle Texteingaben in der Seite zurückzukehren. Warum? Da jeder Eingang ist das erste Anpassungselement innerhalb seines eigenen Baum.

Wenn Sie jedoch einen Ausdruck wie:

/descendant::input[@type='text'][1]

oder

/descendant::input[@type='text'][2]

der erste Ausdruck den ersten Eingang greifen und der zweite Ausdruck wird den zweiten Eingang greifen. Es ist sehr wichtig, dass Sie ein einzelnes „/“ verwenden und nicht die doppelte „//".

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