如何在使用Selenium驱动程序执行Foreach循环时对其进行控制?

时间:2018-04-25 05:25:50

标签: java selenium foreach

我尝试通过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 :(得分:2)

您的循环可以简化如下。

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}}']"))时,也会找到隐藏的第一页元素。简单的解决方案是在打印之前检查元素是否显示。