(JAVA) Selenium - 无法在 while 循环中找到/检测元素

安东尼怀特

我需要 JAVA Selenium 的帮助。我无法让 Web 驱动程序在 while 循环中找到我想要的元素。我尝试在没有 while 循环的情况下执行此操作,它会起作用。但是,如果没有 while 循环,我无法让 Web 驱动程序在等待元素加载时重新加载页面。如果有人能在这方面帮助我,我将不胜感激。

我的代码的问题是它不会退出循环,因为elementProgress永远是FALSE,因为 Web 驱动程序没有检测到按钮,因此不会更新elementProgress布尔值。

//check if progress button exist
boolean elementProgress;
elementProgress = driver.findElements(By.cssSelector("tr:nth-child(1) .iconLabel")).size() != 0;

//auto reload page to prevent webpage timeout
while (!elementProgress) {
    TimeUnit.SECONDS.sleep(15);
    driver.navigate().refresh();
    boolean check_dl_queue = driver.findElements(By.cssSelector(".cell > .table .total_records")).size() != 0;
    if (!check_dl_queue) {
        driver.navigate().refresh();
    }
    Thread.sleep(1500);
    driver.navigate().refresh();
    elementProgress = driver.findElements(By.cssSelector("tr:nth-child(1) .iconLabel")).size() != 0;
    System.out.println("P2:" + elementProgress); //to printout element status
}
安东尼怀特

我已经找到了解决方案,没有时间在这里发布。下面是解决方法。

//boo stat for while loop
boolean elementProgress = true;
boolean elementProgress2 = true;

//setup new web driver wait
WebDriverWait dl_wait = new WebDriverWait(driver, 15);

//auto reload page to prevent webpage timeout
while (elementProgress) {
    driver.navigate().refresh();
    
    //start button click
    try {
        //phase 1: wait for button 1, if exceed wait time goto exception
        dl_wait.until(presenceOfElementLocated(By.cssSelector("tr:nth-child(1) .iconLabel")));
        retryingFindClick(By.cssSelector("tr:nth-child(1) .iconLabel"));

        //phase 2: refresh page after button successfully clicked
        driver.navigate().refresh();

        //phase 3: wait for button 2, if exceed wait time goto exception
        while(elementProgress2) {
            try {
                dl_wait.until(presenceOfElementLocated(By.cssSelector("tr:nth-child(1) .icon-cancel")));
                retryingFindClick(By.cssSelector("tr:nth-child(1) .icon-cancel"));
                
                //exit elementProgress2 while loop
                elementProgress2 = false;
                
            } catch(Exception ex) {
                //refresh page to counter false positive element not found exception
                driver.navigate().refresh();
            }
        }
        
        //exit elementProgress while loop
        elementProgress = false;

    } catch(Exception ex) {
        //refresh page to counter false positive element not found exception
        driver.navigate().refresh();
    }
}

public boolean retryingFindClick(By by) {
    boolean result = false;
    int attempts = 0;
    while(attempts < 2) {
        try {
            driver.findElement(by).click();
            result = true;
            break;
        } catch(StaleElementReferenceException e) {
        }
        attempts++;
    }
    return result;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章