2016-08-05 174 views
0

我是使用硒Webdriver並編寫c#的新手。我在腳本中使用了很多thread.sleep()命令來確保Selenium不會嘗試點擊太快。在大量的研究,我發現這是令人難以接受的,並有「更好」的方式來做到這一點,所以我開始使用: -Selenium c#wait.until(expectedconditions)...函數無法在屏幕上找到對象/元素

wait.Until(ExpectedConditions.ElementToBeClickable(By.Id("FieldId"))); 

等待在另一個類中定義爲: -

wait = new WebDriverWait(driver, new TimeSpan(0, 0, 0, 10)); 

我只能得到這個工作運行腳本的2/10倍沒有得到:

沒有這樣的元素例外:無法找到元素......

我現在有很多這個問題的例子,我已經停止使用thread.sleep。經過大量的研究,我總是發現這是建議的方式,但它似乎完全不可靠。我錯過了什麼嗎?元素在2秒後總是在那裏,並且在10秒過去之前發生錯誤。我已經閱讀了至少10個其他類似的帖子,但沒有一個能夠解決這個問題......除了Thread.Sleep(5000)

+0

如果你正在使用'WebDriverWait',你怎麼能''沒有這樣的元素異常',而它拋出'TimeoutException''? –

+0

@SaurabhGaur'Until()'如果它們不在忽略列表中,則拋出異常 –

+0

您還在使用隱式等待嗎?如果您同時使用隱式和顯式等待,您可能會收到意想不到的結果。 – JeffC

回答

1

嘗試在創建服務器後,將NoSuchElementException類型添加到服務器的IgnoreExceptionTypes中。

wait = new WebDriverWait(driver, new TimeSpan(0, 0, 0, 10)); 
wait.IgnoreExceptionTypes(typeof(NoSuchElementException)); 
wait.Until(ExpectedConditions.ElementToBeClickable(By.Id("FieldId"))); 

一般來說,如果您指定的超時到期之前,服務員正在恢復,這是因爲發生異常當前未被忽略。

WebDriverWait類是從DefaultWait類派生的。這兩個你可以在github上查看,我發現它對理解如何使用它非常有幫助。

+0

你的回答基本上是正確的,除了異常類型應該是'NoSuchElementException' –

+0

@ kovpaev-alexey更新。謝謝! – digitalnoiz

+0

@digitalnoiz謝謝你。我會試着將其添加到我的忽略中,看看這是否有助於解決問題。當我這樣做時,如果它有效,我就不會在這裏。無論哪種方式感謝您的建議。 – Mase

相關問題