Как сделать управление циклом Foreach при выполнении его с драйвером Selenium? - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь получить текст через цикл foreach, как показано на странице. Поток: он печатает текст из одной строки и, как только он завершается, он переходит на вторую страницу и снова начинает извлекать текст. Проблема в том, что он извлекает данные первой страницы несколько раз, например иногда 2, 3 или 4 раза. Как управлять этим для однократного выполнения?

    if (driver.findElement(By.xpath("//button[@ng-click='currentPage=currentPage+1']")).isEnabled()) {

        int ilength = driver.findElements(By.xpath("//input[@ng-attr-id='{{item.attr}}']")).size();

        Outer: for (int i1 = ilength; i1 > 0;) {
            List<WebElement> findData = driver.findElements(By.xpath("//input[@ng-attr-id='{{item.attr}}']"));
            for (WebElement webElement : findData) {
                String printGroupName = webElement.getAttribute("value").toString();
                System.out.println(printGroupName);
                ilength--;
            }

            if (driver.findElement(By.xpath("//button[@ng-click='currentPage=currentPage+1']")).isEnabled()) {
                action.moveToElement(driver.findElement(By.xpath("//button[@ng-click='currentPage=currentPage+1']"))).click().perform();
                page.pagecallingUtility();
                ilength = driver.findElements(By.xpath("//input[@ng-attr-id='{{item.attr}}']")).size();
            } else {
                break Outer;
            }
        }

    } else {
        List<WebElement> findAllGroupName = driver.findElements(By.xpath("//input[@ng-attr-id='{{item.attr}}']"));

        for (WebElement webElement : findAllGroupName) {
            String printGroupName = webElement.getAttribute("value").toString();
            System.out.println(printGroupName);
        }
    }

HTML Page

Данные консоли, по которым она получает информацию Console

1 Ответ

0 голосов
/ 25 апреля 2018

Ваш цикл может быть упрощен, как показано ниже.

boolean newPageOpened = true;
while (newPageOpened) {
    List<WebElement> findData = driver.findElements(By.xpath("//input[@ng-attr-id='{{item.attr}}']"));
    for (WebElement webElement : findData) {
        if (webElement.isDisplayed()) {
            String printGroupName = webElement.getAttribute("value").toString();
            System.out.println(printGroupName);
        }
    }

    WebElement nextButton = driver.findElement(By.xpath("//button[@ng-click='currentPage=currentPage+1']"));
    if (nextButton.isEnabled()) {
        action.moveToElement(nextButton).click().perform();
        page.pagecallingUtility();
    } else {
        newPageOpened = false;
    }
}

Что касается содержимого первой страницы печати снова и снова, я подозреваю, что при открытии второй страницы содержимое первой страницы просто скрывается на странице. Поэтому, когда вы используете driver.findElements(By.xpath("//input[@ng-attr-id='{{item.attr}}']")), также обнаруживаются скрытые элементы первой страницы. Простое решение - проверить, отображается ли элемент перед его печатью.

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