2016-02-29 156 views
1

我一直在使用C#selenium來自動化應用程序。我正面臨執行測試時出現間歇性故障的問題。C#硒:測試間歇失敗

有時測試通過&有時會失敗。

失敗說明該元素/框架/窗口不可用。

我一直在使用下面的代碼等待

WebDriverWait wait = new WebDriverWait(Driver.Instance, TimeSpan.FromSeconds(100)); 
      IWebElement elementToWait = wait.Until<IWebElement>((d) => 
      { 
       return Driver.Instance.FindElement(By.Id("Element ID")); ; 
      }); 

是這種不一致是由於等待的webdriver使用?爲避免這種情況,最佳做法是什麼?

+1

當調用FindElement()時,使用WebDriverWait將解決不在DOM中的元素的時序問題。但是,聽起來您的情況中還有其他細節(您迄今爲止拒絕提供)。來自例外的確切消息將是一個好的開始。據我所知,.NET綁定中沒有代碼,也沒有任何瀏覽器特定的驅動程序實現會導致發生異常,並顯示消息「元素/框架/窗口不可用」。 – JimEvans

回答

0

這是一個非常寬泛的問題,但是這在硒中發生的最常見的原因是因爲調用FindElement時元素不在DOM中。

有許多東西你可以試試... 有一件事你應該在你的驅動程序實例如下設置一個隱含的等待超時:

driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(50)); 

這應該做你的初始化後的webdriver權實例。

你可以嘗試的第二件事是用預期時調用FindBy:

IWebElement element = wait.Until(ExpectedConditions.ElementExists(By.Id("Element ID"))); 

,有幾種不同的ExpectedConditions,你可以測試出來,看看有什麼最適合你。

0

我想看看上面的代碼。你正在瀏覽頁面嗎?

如果是的話,嘗試在此之前加入短睡眠:

Thread.Sleep(500); 

隱等待是偉大的,但他們往往有高失敗率沒有短硬編碼的睡眠。通常它只需要100毫秒。

0

您提到的問題是因爲在100秒後,您的元素仍然沒有出現在DOM上,請將您的日誌發送給我們,但我確信這是因爲這一點。

隱式/顯式等待工作的方式是在設置完成之後,如果元素不存在,則會引發一個異常,並帶有超時消息(在您遇到100秒後)。

但是,請再次提供更多信息。