Selenium - 如何在WebDriverWait wait.until运行时执行命令

时间:2013-01-08 21:41:38

标签: selenium webdriver selenium-webdriver

是否可以在等待元素出现时执行命令?特别是我正在等待一个元素出现,但除非我刷新页面,否则它不会出现。这是我的代码

wait = new WebDriverWait(driver, 30);
element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("xpath_here")));
state = element.getText();

除非我点击应用程序的刷新按钮,否则我正在等待的元素永远不会出现。如何在我设置的30秒超时期间刷新?

2 个答案:

答案 0 :(得分:1)

您可以这样做:

    System.out.println("before wait");
    WebElement el = (new WebDriverWait(driver, 30))
      .until(new ExpectedCondition<WebElement>(){
        //try the following cycle for 30 seconds
        @Override
        public WebElement apply(WebDriver driver) {
            //refresh the page
            driver.navigate().refresh();

            System.out.println("Refreshed");
            //look for element for 5 seconds
            WebElement sameElement = null;
            try{
                sameElement = (new WebDriverWait(driver, 5))
                      .until(new ExpectedCondition<WebElement>(){
                    @Override
                    public WebElement apply(WebDriver driver) {
                        System.out.println("Looking for the element");
                        return driver.findElement(By.id("theElementYouAreLookingFor"));
                    }});    
            } catch (TimeoutException e){
                // if NULL is returns the cycle starts again
                return sameElement;
            } 
            return sameElement;
    }});        
    System.out.println("Done");

它将尝试获取该元素30秒,每5秒刷新一次页面。

答案 1 :(得分:0)

我会为该代码添加更多行:基本上,如果state.isEmpty()然后使用Webdriver“Action”类将鼠标移动到刷新按钮(你的应用程序需要在其中使用一个刷新按钮然后再运行等待以验证它是否出现。