Ich benutze Selenide/Selenium, um meine Java-Automatisierungsskripte zu schreiben, und vor kurzem stand ich vor einem Problem. Ich möchte ein Element aus derselben Reihe nehmen, das ich mit meinem zweiten Element vergleiche. Html Beispielcode:Element mit CSS-Selektor mit mehreren Elementen in einer Tabelle nehmen
<tr ng-repeat="testing" class="ng-scope" style="">
<td class="ng-binding">Style</td>
<td ng-if="testing2" class="ng-binding ng-scope">1</td>
<td class="ng-binding">5%</td>
</tr>
<tr ng-repeat="testing" class="ng-scope" style="">
<td class="ng-binding">Mask</td>
<td ng-if="testing2" class="ng-binding ng-scope">2</td>
<td class="ng-binding">8%</td>
</tr>
...
Lasst uns vorstellen, dass es viel mehr von denen sein. Und das wichtigste ist, dass diese randomisiert werden können. jedes Mal. Sie hängen von der letzten Seite ab, was ich auswähle und wie.
Also im Grunde möchte ich nach Tests suchen und dass es 8% hat.
Was ich versucht habe, aber ich weiß nicht, was ich damit machen soll. Es speichert alle Elemente in der Liste. Bu Ich bekomme Css-Selektor mit Chrome-Treiberinfo davor. Ich kann es ausziehen, aber ich denke, es gibt viel bessere Lösungen:
List<WebElement> list = getWebDriver().findElements(By.cssSelector("[ng-
repeat='hyvitisLiik in vm.taotluseHyvitised'] > [class='ng-binding']"));
for(int i = 0; i < list.size(); i++){
logger.info(list.get(1));
}
Ich habe auch versucht, ein Element mit diesem Code zu erhalten:
int counter = $$(By.cssSelector("tr > [class='ng-binding']")).size();
for (int i = 0; i < counter; i++) {
SelenideElement word= $$(By.cssSelector(lokaator)).get(counter);
word.getText();
}
Dieser Code nimmt die „Maske“ und „8 % "Elemente. Aber was ich wirklich will, ist zu testen, ob der getText Wert "Maske" ist, nehmen Sie den Prozentwert und vergleichen Sie ihn. Zum Beispiel: Suchen Sie im Web nach dem Wort "Maske", nehmen Sie den Prozentwert (in diesem Fall ist es 8%) und validieren Sie mit assert, dass es genau 8% ist.
Gibt es eine Möglichkeit CSS-Selektor mit dem Index zu setzen, wie
tr[1] > [class='ng-binding']
, die für die zweite tr Klasse wählen wird? Irgendwelche anderen Ratschläge zu finden, die ich will?
EDIT: Ist es möglich, das Element mit CSS-Selektor nur eine Zeile mit zu bekommen, wie mit XPath-Option in Antwort zeigte, was @Guy schrieb:
WebElementelement=getWebDriver().findElement(By.xpath("//td[text()='Mask']/followingsibling::td[2]"));
element.getText(); // 8%
Xpath Lösungen ist großartig, sauber und einfach, aber ich möchte wirklich CSS für meinen Code verwenden. Wenn es etwas ähnliches in CSS-Ansicht gibt, teilen Sie es bitte – imbasheep
@iljuwka können Sie Text mit 'cssSelctor' finden, etwas wie' "td: enthält (Mask)" 'wenn Speicher dient. Selenium unterstützt dies jedoch nicht, Sie erhalten 'InvalidSelectorException', und' cssSelector' hat nicht den Gegenwert von 'following-sibling'. – Guy
Ja, ich bekam jedes Mal "InvalidSelectorException" -Fehler. Deshalb habe ich gefragt, ob jemand einen Weg finden könnte, es zu lösen. Ich glaube // XPath ist das Beste, was ich verwenden kann – imbasheep