Как найти нужное значение в разбитой на страницы веб-таблице? - PullRequest
0 голосов
/ 23 апреля 2020

На странице есть веб-таблица, которая разбита на страницы. я хочу go через таблицу и проверить, нет ли ячейки с текстом из param - нажмите кнопку "Далее" и проверьте еще раз

Я пытался написать что-то подобное. Я написал метод, который просматривает список строк и получает текст из ячейки под указанным столбцом в каждой строке

protected GroupTableContainerComponent getContainerComponentByName(String groupCode) {
    GroupTableContainerComponent result = null;
    List<GroupTableContainerComponent> rows = getContainerComponents();
    Iterator<GroupTableContainerComponent> i = rows.iterator();
    while (i.hasNext()) {
        GroupTableContainerComponent current = i.next();

        if (!current.getGroupCodeText().toLowerCase().equals(groupCode.toLowerCase())) {
            clickNextButton();

            List<GroupTableContainerComponent> rows2 = getContainerComponents();
            Iterator<GroupTableContainerComponent> j = rows2.iterator();
            while (j.hasNext()){
                GroupTableContainerComponent current2 = j.next();
                if (current2.getGroupCodeText().toLowerCase().equals(groupCode.toLowerCase())){

                }
            }
        }
        result = current;
        break;
    }
    if (result == null) {
        throw new RuntimeException(String.format("Group with groupCode: %s not found", groupCode));
    }
    return result;
}

Но после нажатия следующей кнопки я получаю ошибку StaleElementReferenceException

Я думаю, это происходит потому, что мой список строк содержит старую строку с предыдущей страницы таблицы

Вот мой 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')]");

1 Ответ

0 голосов
/ 23 апреля 2020

Я сделал это, я решил создать списки в моем методе. Сначала я проверяю, присутствует ли ячейка с текстом из param на первой странице таблицы, если ячейка не существует, я проверяю состояние кнопки «Следующая страница» и, пока она включена, я нажимаю на нее и жду, пока первый список будет невидимым и затем создайте новые списки и назначьте новые значения

protected GroupTableContainerComponent getContainerComponentByName(String groupCode) {
        GroupTableContainerComponent result = null;
        WebDriverWait waits = new WebDriverWait(driver, 10);
        List<WebElement> rows = driver.findElements(By.xpath(groupTableContainerXpath));
        List<GroupTableContainerComponent> containerComponents = new ArrayList<>();
        for (WebElement current : rows) {
            containerComponents.add(new GroupTableContainerComponent(current));
        }
        for (GroupTableContainerComponent current : containerComponents) {
            System.out.println(current.getGroupCodeText());
            if (current.getGroupCodeText().toLowerCase().equals(groupCode.toLowerCase())) {
                result = current;
                break;
            }

        }
        if (result == null){

            boolean isEnabled = isNextArrowEnabled();
            while (isEnabled) {
                clickNextButton();
                waits.until(ExpectedConditions.invisibilityOfAllElements(rows));
                List<WebElement> rows2 = waits.until(ExpectedConditions.visibilityOfAllElements(driver.findElements(By.xpath(groupTableContainerXpath))));
                List<GroupTableContainerComponent> containerComponents2 = new ArrayList<>();
                for (WebElement current2 : rows2) {
                    containerComponents2.add(new GroupTableContainerComponent(current2));

                }
                for (GroupTableContainerComponent current3 : containerComponents2) {
                    System.out.println(current3.getGroupCodeText());
                    if (current3.getGroupCodeText().toLowerCase().equals(groupCode.toLowerCase())) {
                        result = current3;
                        break;
                    }
                }

                if (result == null) {
                    if (isNextArrowEnabled()) isEnabled = true;
                    else isEnabled = false;
                } else return result;
            }
        }

            if (result == null) {
                throw new RuntimeException(String.format("Group with groupCode: %s not found", groupCode));
            }

        return result;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...