Если компонента с текстом из param нет, нажмите следующую кнопку Selenium - PullRequest
0 голосов
/ 22 апреля 2020

Я написал метод, который просматривает список ячеек, присутствующих в таблице, и проверяет, присутствует ли ячейка с текстом из 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')]");
...