2015-03-02 2 views
0

Я использую смесь Geb и Selenium для тестирования переднего конца нашего веб-портала. Наши бывшие разработчики реализовали оверлейный div, чтобы блокировать любой доступ к странице при ожидании контента. Таким образом, мне часто приходится ждать, пока этот div больше не будет видимым, прежде чем я могу щелкнуть элемент интереса.Geb/Selenium - другой элемент получит щелчок

Я приложил безусловное ожидание, чтобы проверить, что оверлейный div не виден, но иногда клик идет на этот оверлейный div в любом случае. Это действительно странно: наложение не видно, соответственно. не прикреплен к дереву DOM, но щелчок идет к нему.

Как это может произойти? Что я могу сделать, чтобы обойти эту проблему?

+1

Мое предположение заключается в том, что его не дожидаясь его исчезновения (исчезнуть). проверить тайм-аут на это ожидание и при необходимости увеличить? – sircapsalot

+1

Я., я столкнулся с такой же ситуации и придумали обходной путь делать во время цикла для элемента возврата 'NoSuchElementException' – Saifur

+0

вот мой беглый ожидания: – AndyDoe

ответ

0

Замена текучего ожидания:

protected final boolean waitForPageNotBusy(By by = By.className("busyOverlay")) { 
    log.debug("Waiting for page not busy...") 
    def timeout = 120 
    boolean isNotBusy = new FluentWait(driver) 
     .withMessage("Busy overlay still visible after $timeout seconds.") 
     .pollingEvery(1, TimeUnit.SECONDS) 
     .withTimeout(timeout, TimeUnit.SECONDS) 
     .ignoring(org.openqa.selenium.NoSuchElementException.class) 
     .ignoring(UnhandledAlertException.class) 
     .until(ExpectedConditions.invisibilityOfElementLocated(by) as Function); 
    isNotBusy 
} 

петлей, предложенной Saifur:

protected final boolean waitForPageNotBusy() { 
    By by = By.className("busyOverlay") 
    log.debug("Waiting for element to disappear: {}", by.toString()) 
    try { 
     while (driver.findElements(by).size() > 0) { 
      log.debug("Element still visible: {}", by.toString()) 
      sleep(1000) 
     } 
    } catch (NoSuchElementException nse) { 
     log.debug(nse.message) 
     return true 
    } 
} 

может решить мою проблему.

Смежные вопросы