2016-05-07 95 views
0

請幫助我理解以下問題。請。有條件的等待vs隱含等待 - 硒

我必須得到所有鏈接並稍後檢查。我用下面的代碼:

open(url); 
List<String> links = new ArrayList<>(); 
for (SelenideElement link : $$("a")) 
    links.add(link.attr("href")); 

,當我與這些版本的API使用本使用Linux: Maven的3.1 硒V3.5 硒v2.53 火狐v45.0.1 然後代碼不能花時間足以捕獲來自頁面的鏈接。然後,我必須在獲取鏈接之前添加驅動程序等待。 我添加以下(這是有條件的等待):

WebDriverWait waitLog = new WebDriverWait(WebDriverRunner.getWebDriver(), 20); 
waitLog.until(ExpectedConditions.visibilityOf($(By.tagName(Selector)))); 

它工作得很好,我運行一個以上的時間。

昨天運行時,我感到很驚訝,它沒有工作,並沒有足夠的時間來獲得鏈接!

所以我替換隱等待條件等待,並添加以下內容:

WebDriverRunner.getWebDriver().manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);  

現在是工作的罰款。

  • 發生了什麼事?

  • 這是什麼讓它有時有時工作,有時不能工作?

  • 如何返回到有條件的等待,保持代碼正常工作?

那麼如何恢復這個問題呢?並防止這個問題在未來發生。

回答

0

第二次加載url可能會有一些延遲。請嘗試增加有條件等待的延遲時間。顯式和隱式等待的主要區別如下。

顯式或有條件的等待將WebDriver停止指定的時間,直到提到的元素可用。而隱式等待將跳過對指定時間的執行WebDriver,對於在頁面上未找到的每個元素。

希望這會有所幫助。