2012-07-24 68 views
2

我知道頂級webdriver API不提供對頁面加載事件處理程序的訪問,但是有什麼辦法(包括通過REST接口直接向服務器發送命令)直接調用硒服務器來強制頁面加載塊的行爲?我知道等待元素破解,但我寧願直接去源代碼,如果可能的話。我遇到的具體問題是一個頁面,當單擊一個按鈕時會進行JS調用,在頁面上顯示模態對話框,同時發生一些後端進程,然後在後端工作完成後將瀏覽器轉發到新頁面。由於點擊操作並不直接觸發新頁面,因此硒不會阻止該事件(並且無論如何我都不希望它在所有情況下都會)。在Selenium Webdriver中顯式觸發頁面加載阻塞

我已經查看了Command類的任何看起來很有希望的命令,但沒有看到任何東西。我發現http://code.google.com/p/selenium/wiki/JsonWireProtocol,但它也沒有幫助...

+0

什麼隱含的期待? – 2012-07-25 07:34:50

回答

1

這是一個棘手的。

在selenium/webdriver中訪問http狀態不是很方便。 我會推薦一個實用的方法。國際海事組織等待元素的方法不是黑客,它是正確的方式來做到這一點。在你的情況下,我會等待selenium.getLocation()或webdriver.getCurrentUrl()包含一個期望的值。

事情是這樣的:

webDriverWait.until(new Function<WebDriver, WebElement>() { 
    @Override 
    public WebElement apply(WebDriver driver) { 
     //TODO: pass expected url as parameter 
     boolean expectedUrl = driver.getCurrentUrl().contains("your redirect url"); 
     if (expectedUrl) { 
      //If not null is returned, we have found something and waitUntil stops 
      return new RemoteWebElement(); 
     } 
     //try again 
     return null; 
    } 
}); 
+0

我不能使用等待模塊(至少現在沒有進行一些嚴重的修改),因爲我實際上直接插入webdriver.execute來控制我的測試框架中的頁面加載事件,而且我需要修改wait請注意頁面加載特殊情況。我寫了自己的等待方法,並將其附加到webdriver(需要重構它到一個適當的子類,但這是爲了以後),並試圖等待url更改,但問題是,只是因爲url是預期的不意味着頁面已加載並準備就緒。當處理新窗口時,這成爲額外的問題。 – 2012-07-25 13:25:12