首先我想描述我的問題的動機。在開始執行javascript之前,有沒有辦法轉換HtmlUnit加載的頁面?
我有一個複雜的網頁來測試硒+ HtmlUnit,它啓動不同的JavaScript腳本。我描述的問題應該是相當普遍的。
頁面上有一個按鈕,jQuery在加載頁面後綁定點擊回調(click event handler)。有一個明確的Wait(這是一個Selenium術語)使按鈕在測試代碼中可點擊。所以只要按鈕變成可點擊的,它就會被Selenium點擊。但是,通常情況下,這發生在jQuery設法將按鈕事件處理程序附加到按鈕之前。在這種情況下,Selenium測試失敗。
我想要做的是在頁面開始執行javascript之前預處理由HtmlUnit訪問的網頁,在頁面的開始處注入一些<script>myownscript()</script>
(以便它在該頁面上的任何其他腳本之前執行)。然後,我將能夠知道,控制Selenium測試代碼中的某些條件,何時發生了點擊事件處理程序的附加事件(我是如何做到的,取決於應用程序的細節)。如果我讓Selenium點擊按鈕,那麼點擊事件處理程序的存在將得到保證,並且測試將按計劃繼續進行 - 由於缺少點擊事件處理程序而沒有錯誤。
讓我們分開這個想法是好還是壞(當然,在嘗試單擊有問題的按鈕之前,在Selenium測試代碼中引入了足夠大的延遲,但是隨後測試的總體持續時間可能會有問題,因爲我描述的問題存在於正在測試的應用程序的許多頁面上)。 Selenium/HtmlUnit中是否有一些鉤子允許預處理從服務器獲取的頁面,如我所述,在JavaScript開始在頁面上執行之前注入腳本?
我還不清楚你的目的是什麼。正如你所提到的,你應該添加等待元素。添加Wait很容易。 – Buaban
@Buaban我試圖編輯問題以使其更清晰。 –