2013-08-05 146 views
1

等待元素出現在網頁上的最佳方式是什麼?我已經讀過,我們可以使用隱式等待和函數,如webdriverwait,fluentwait等,最後但不是最少的thread.sleep()...我使用最多,但要停止使用。等待使用Selenium webdriver的元素

我的情景:在一個網站

用戶登錄...網站檢查證書,並在覆蓋(一種彈出,但不是一個單獨的窗口)的形式提供的報價給用戶。我需要驗證疊加層上的文字。 用戶登錄和顯示疊加層之間存在時間差。什麼是最好的方法,以便硒等待直到元素不可見爲止。由於疊加層不是單獨的頁面,而是主頁面的一部分,所以隱式等待根本不起作用。

歡迎您提出任何建議... :)

+0

我會建議流利的等待,因爲它使很多在平時間和控制總工期的。但隱含的等待也應該起作用,除非你指定的時間很少。可能你正在檢查元素的存在,並且代碼正在破壞。 – Vinay

+0

我會推薦使用webdriverwait或fluentwait。我不喜歡隱含的等待,而且我絕對不喜歡sleep(),因爲這兩者往往會導致無需等待。有相當ExpectedConditions,你可以用wait.until()等待 –

回答

0

始終使用隱式等待啓動。我認爲Selenium默認爲5秒,所以如果你做了一個driver.findElement(),暗示它會等待5秒鐘。這應該做到這一點。如果您遇到這種情況所花費的時間是不可預知的,那麼請使用FluentWait(具有相同的5秒超時),但也可以使用.ignoring方法,並在while循環內包裝它。這裏的基本思想是:

int tries=0; 
while (tries < 3) { 
    //fluent wait (with .ignoring) inside here 
    tries ++1; 
} 
0
WebDriverWait wait = new WebDriverWait(driver, 20); 
wait.until(ExpectedConditions.elementToBeClickable(By.id("optionsBuilderSelect_input"))); 

我是一個專業的刮板(http://nitinsurana.com)我已經寫了使用硒30+的軟件,我從來沒有遇到任何問題,這樣,反正上面是一個示例代碼。

所有我能想到的是,除非條件必須被檢查,因爲許多時間元素已經可見,但它們不是可點擊的,而且類似的東西。我想你應該嘗試不同的選擇,我希望你會找到需要的。

0
public boolean waitForElement(WebElement ele, String xpath, int seconds) throws InterruptedException{ 
    //returns true if the xpath appears in the webElement within the time 
    //false when timed out 
    int t=0; 
    while(t<seconds*10){ 
     if(ele.findElements(By.xpath(xpath)).size()>0) 
      return true; 
     else{ 
      Thread.sleep(100); 
      t++; 
      continue; 
     } 
    }  
    System.out.println("waited for "+seconds+"seconds. But couldn't find "+xpath+ " in the element specified"); 
    return false; 
} 
0

你可以等待元素的存在顯示如下:

new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfElementLocated(By.id("someId"))); 
相關問題