提问者:小点点

创建一个循环来重新加载页面,同时使用Selenium和Java


我有一个页面,在某些时刻,它不加载硒。如果我点击硒打开页面上的“重新加载”按钮,有时页面会加载。这个页面是一个遗留系统,我们无法更改它。

然后我需要创建一个条件,如下所示:

>

  • 如果Id: xxx可见

    • 连续执行

    如果没有:

    • 驱动程序。导航()。刷新();

    我在用硒Java。


  • 共2个答案

    匿名用户

    我建议实现一个自定义的期望条件,例如:

    import org.openqa.selenium.support.ui.ExpectedCondition
    
    public static ExpectedCondition<Boolean> elementToBeVisibleWithRefreshPage(By element, int waitAfterPageRefreshSec) {
        return new ExpectedCondition<Boolean>() {
            private boolean isLoaded = false;
    
            @Override
            public Boolean apply(WebDriver driver) {
                List elements = driver.findElements(element);
                if(!elements.isEmpty()) {
                    isLoaded = elements.get(0).isDisplayed();
                }
                if(!isLoaded) {
                    driver.navigate().refresh();
                    // some sleep after page refresh
                    Thread.sleep(waitAfterPageRefreshSec * 1000);
                }
                return isLoaded;
            }
        };
    
    }
    

    用法:

    By element = By.id("xxx");
    
    new WebDriverWait(driver, Duration.ofSeconds(30)).until(elementToBeVisibleWithRefreshPage(element, 10));
    

    这将等待30秒,直到元素可见,如果元素不可见,将暂停10秒刷新页面。

    潜在的睡眠可能会被其他WebDriver等待所取代,但这也应该有效。

    匿名用户

    最简单的方法是将代码块包装起来,以便在try-catch{}块中连续执行,从而诱发WebDriver等待visibilityOfElementSite(),如下所示:

    import org.openqa.selenium.By;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.support.ui.WebDriverWait;
    import org.openqa.selenium.support.ui.ExpectedConditions;
    
    try  
    {  
        WebElement element = new WebDriverWait(driver, Duration.ofSeconds(20)).until(ExpectedConditions.visibilityOfElementLocated(By.id("elementID")));
        // other lines of code of continius execution
    }  
    catch(TimeoutException e)  
    {  
        driver.navigate().refresh();  
    }