2017-05-31 80 views
0

爲什麼我的等待方法不能正確等待元素可見?等待方法未正確等待元素可見

  1. 我正在不斷建立內詹金斯,但時不時的方法失敗:元素是不可見的等待10秒..
  2. 我已經等待變量設置爲10秒

  3. 我的方法看起來是否正確?

    public boolean WaitUntilWebElementIsVisible(WebElement element) { 
    try { 
        Thread.sleep(2000); 
        this.wait.until(ExpectedConditions.visibilityOf(element)).isDisplayed(); 
        System.out.println("WebElement is visible using locator: " + element.toString()); 
        return true; 
    } catch (Exception e) { 
        System.out.println("WebElement is NOT visible, using locator: " + element.toString() + " ,Exception: " + e.getMessage()); 
        Assert.fail("Method failed: WaitUntilWebElementIsVisible"); 
        //Assert.fail("WebElement is NOT visible, using locator: " + element.toString()); 
        return false; 
    } 
    

    }

+0

只需使用this.wait.until(ExpectedConditions.visibilityOf(元素)) – kushal

+0

時,如果未能在什麼樣的元素?複選框?單選按鈕?你有什麼版本的Selenium? –

回答

0

你的代碼看起來不錯。你可以考慮增加超時時間。 10秒是非常小的。嘗試30秒或更長時間。

+0

我唯一擔心的是有很多方法,並且我還實現了一個重試方法(每個方法重試x3次,時間可以加起來) – Gbru

0

這樣做的方法如下:

boolean result = false; 
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver) 
        .withTimeout(timeOutInSeconds, TimeUnit.SECONDS)      
        .pollingEvery(pollingIntervalInSeconds, TimeUnit.SECONDS)    
        .ignoring(NoSuchElementException.class)      
        .ignoring(StaleElementReferenceException.class);      
      wait.until(new ExpectedCondition<Boolean>() { 
       @Override 
       public Boolean apply(WebDriver webDriver) { 
        try { 
         return webDriver.findElements(locator).size() > 0 && webDriver.findElement(locator).isDisplayed();       
        } catch (Exception e) { 
         System.out.println("Got Exception for locator " +locator+ " while waiting for it to display. Trying again...");      
         return false; 
        } 
       } 
      }); 
      result = true;