2011-11-08 63 views
4

我目前使用最新版本的Selenium及其.net綁定來執行一些測試。 不幸的是,我不得不模擬一些發生在可變時間的反應,只能在非常有限的時間間隔內執行,並且連續輪詢DOM不夠快。 Selenium是否有辦法掛鉤DOM事件,以便我可以在我的代碼中攔截我感興趣的事件? 如果是這樣,將不勝感激示例.net代碼。硒對事件做出反應

在此先感謝

P.S:我主要是淡泊的瀏覽器,但在Chrome瀏覽器的一個解決方案是首選

+0

根據您的瀏覽器,這可能是定位器類型和瀏覽器類型的問題,這就是爲什麼你不能輪詢DOM。 – CBRRacer

+0

我認爲他可以輪詢DOM,他只是在尋找一個不需要輪詢的解決方案。 – prestomanifesto

+1

@prestomanifesto OP說輪詢DOM速度不夠快,因此我關於瀏覽器類型的陳述。案例和觀點我使用Selenium 2 Webdriver C#進行了基準測試,發現通過ID查找元素需要firefox中的198ms和IE中的308ms(這是每個瀏覽器的平均5次嘗試),但CssSelector或Xpath對於Firefox爲7ms,對於IE瀏覽器來說是38ms,平均每次嘗試5次,所以如果他在IE中通過ID輪詢DOM,可能比需要的響應時間要慢 – CBRRacer

回答

2

你唯一的這種希望是做在JavaScript中。您可以使用ISelenium.GetEval()ISelenium.RunScript()運行任意JavaScript代碼。 GetEval()將同步執行代碼並返回塊中最後一個表達式的值。 RunScript()實際上會在您的代碼中使用您的代碼在DOM中構建一個新的<SCRIPT>元素,這會導致瀏覽器異步運行它,等待JavaScript引擎空閒(,即,直到至少在RunScript()命令完成之後)。

您可能想要使用RunScript()來掛鉤您想要的事件,然後讓您的測試腳本等待,直到事件有足夠的時間觸發,然後您可以使用GetEval()來檢索或驗證事件處理程序的結果。

+0

這裏有一個鏈接,指向@Ross Patterson提到https://www.swtestacademy.com/selenium-wait-javascript-angular-ajax/ –

相關問題