2015-03-04 2 views
0

Ниже мой кодВ чем разница между явным ожиданием и плавным ожиданием в webdriver?

public boolean waitForElementToBeClickable(String xpathValue){ 

     Boolean flag = false; 
     WebElement myDynamicElement = (new WebDriverWait(Base.base.getDriver(), 30)) 
        .until(ExpectedConditions.elementToBeClickable(By.xpath(xpathValue))); 
     flag = true; 
     return flag; 

    } 

Это ожидание элемента появляться в течение 30 секунд, и если элемент готов до 30 сек это выполнить следующую команду.

, но когда я использую ниже код для свободно ждать

public Boolean waitForElementToAppear(final WebElement e){ 

     Wait<WebElement> wait = new FluentWait<WebElement>(e) 
       .withTimeout(30, TimeUnit.SECONDS)    
       .pollingEvery(2, TimeUnit.SECONDS) 
       ; 

     Boolean foo = wait.until(new Function<WebElement, Boolean>() { 
      public Boolean apply(WebElement element) { 

       return element.isDisplayed(); 
      } 
      }); 
     return foo; 
     } 

Это говорит No-такое исключение элемента, он даже и не ждать 30 секунд, это выбросить исключение мгновенно.

Может кто-нибудь сказать, в чем проблема?

+0

См [это] (http://stackoverflow.com/questions/28658418/differences-between-impilicit-explicit-and-fluentwait) – Saifur

+0

возможно дубликат [селеном WebDriver - явное wait vs implicit wait] (http://stackoverflow.com/questions/10404160/selenium-webdriver-explicit-wait-vs-implicit-wait) – olyv

ответ

0

Обычно, когда вы используете FluentWait, вам придется игнорировать, по крайней мере, NoSuchElementException во время ожидания.

Как это:

Wait<WebElement> wait = new FluentWait<WebElement>(e) 
      .withTimeout(30, TimeUnit.SECONDS)    
      .pollingEvery(2, TimeUnit.SECONDS) 
      .ignoring(NoSuchElementException.class); 
+0

Если я использую игнорировать тест, но в действии он не должен, поскольку элемент имеет не было нажато. –

+0

Я не знаю, что вы проверили код, не могли бы вы поделиться им ?, так или иначе, ваш код ждет, когда элемент будет видимым "return element.isDisplayed();" не кликабельны. Вы должны изменить свое условие, если хотите эквивалентное ожидание. – Morvader