Я написал метод, который просматривает список ячеек, присутствующих в таблице, и проверяет, присутствует ли ячейка с текстом из param
protected GroupTableContainerComponent getContainerComponentByName(String groupCode) {
GroupTableContainerComponent result = null;
for (GroupTableContainerComponent current : getContainerComponents()) {
if (current.getGroupCodeText().toLowerCase().equals(groupCode.toLowerCase())) {
result = current;
break;
} else {
clickLastButton();
sleep(2000);
for (GroupTableContainerComponent current2 : getContainerComponents()) {
System.out.println(current2.getGroupCodeText());
if (current2.getGroupCodeText().toLowerCase().equals(groupCode.toLowerCase())) {
result = current2;
break;
}
}
}
}
if (result == null) {
throw new RuntimeException(String.format("Group with groupCode: %s not found", groupCode));
}
return result;
}
Если ячеек нет с указанным c text, я нажимаю на последней кнопке в paginator и дождитесь, пока данные изменятся в таблице, а затем go снова через список и проверьте
Но я получаю ошибку StaleElementReferenceException сначала оператор if, перед метода getGroupCodeText () current.getGroupCodeText()
method
Я думаю, это происходит из-за моего первого l oop, когда я получаю первые значения из таблицы, и я думаю, что мои логики c должны быть лучше, чем есть, но я не знаю, как это изменить
Обновление
Вот мой getContainerComponent ()
public List<GroupTableContainerComponent> getContainerComponents() {
containerComponents = new ArrayList<>();
for (WebElement current : driver.findElements(By.xpath(groupTableContainerXpath))){
containerComponents.add(new GroupTableContainerComponent(current));
}
return containerComponents;
}
и мой Xpath
private final String groupTableContainerXpath = "//div[@class='table-container']/table/tbody/tr";
И мой getGroupCodeText ()
public WebElement getGroupCode() {
WebElement groupsCode = groupTableComponent.findElement(groupCode);
return groupsCode;
}
public String getGroupCodeText() {
return getGroupCode().getText();
}
и xpath
private By groupCode = By.xpath(".//td[contains(@class,'cdk-column-group_name')]");