Вы можете использовать List<>
, поскольку вы используете индексы в xpath.
//tr[@data-testid='row']//td[@class='kor']
<- этот селектор вернет несколько элементов </p>
На основе этих элементов мы можем найти span[@class='da']
element.
Код:
public boolean VerifyKORSecDispaly() {
boolean a = doesRowTextContain(0, "d");
boolean b = doesRowTextContain(1, "d");
boolean c = doesRowTextContain(2, "d");
if (a == true && b == true && c == true) {
return true;
} else {
return false;
}
}
private boolean doesRowTextContain(int index, String expectedString) {
By spanSelector = By.xpath(".//span[@class='da']"); //the dot . reduces the scope of the element. Instead of searching through all the elements in source, we'll reduce the scope to parent element
List<WebElement> dataRows = driver.findElements(By.xpath("//tr[@data-testid='row']//td[@class='kor']"));
return dataRows.get(index).findElement(spanSelector).getText().contains(expectedString);
}
Еще одна вещь - вам не нужно сравнивать a, b or c
с true
, поскольку это ожидаемое значение по умолчанию в выражении if
.
if (a && b && c) {
return true;
} else {
return false;
}
Или даже
return a && b && c
:)
Окончательные методы могут выглядеть так:
public boolean VerifyKORSecDispaly() {
return doesRowTextContain(0, "d") && doesRowTextContain(1, "d") && doesRowTextContain(2, "d");
}
private boolean doesRowTextContain(int index, String expectedString) {
By spanSelector = By.xpath(".//span[@class='da']"); //the dot . reduces the scope of the element. Instead of searching through all the elements in source, we'll reduce the scope to parent element
List<WebElement> dataRows = driver.findElements(By.xpath("//tr[@data-testid='row']//td[@class='kor']"));
return dataRows.get(index).findElement(spanSelector).getText().contains(expectedString);
}