2016-02-28 26 views
1

在我的測試結束後,水豚會自動導航到「about:blank」以便設置下一個測試。有時我正在測試的應用程序會在用戶離開頁面(這是預期的)時拋出一個彈出警報。我有一些代碼來處理這個問題:水豚硒導航到網址在Safari上彈出警報

begin 
    page.driver.browser.navigate.to("about:blank") 
    page.driver.browser.switch_to.alert.accept 
    rescue Selenium::WebDriver::Error::NoAlertPresentError 
    # No alert was present. Don't need to do anything 
    end 

這適用於Firefox,Chrome和IE。但由於Safari的某些原因導航命令掛起,我假設因爲彈出。任何人都知道這個解決方法?

回答

1

工作有一個在這個時候硒語言綁定的任何版本沒有簡單的辦法解決這個。這是Selenium團隊不感興趣解決的已知問題。從根本上說,這是由於Safari的體系結構以及Safari Driver的體系結構。

Safari驅動程序擴展的JavaScript不知道大多數作爲模態可可層窗口出現的警報和彈出窗口以及對話框。 它也不能與它們交互。

有一種方法,但它不容易,沒有人做到了。

您需要使用Cocoa。

所以你會想在這種情況下使用RubyCocoa。 (或PyObjC,如果你使用Python) 然後,你可能還需要一個真正用Objective-C寫的邊車應用程序。 訣竅是使用AX(Accessibility API)和一個單獨的過程來觀察是否存在警報作爲前窗,並在其標籤和按鈕的文本上戳到AX API可見的文本。 AX API可能通過ScriptingBridge在RubyCocoa中公開。 但是,您需要將「應用程序」添加到允許控制計算機的安全性首選項窗格的列表中。

因此,您可以檢測窗口並處理它。

它可能是相當脆弱的跨網站,但如果建成好,你可以處理預期的條件。

0

你可以嘗試確認這樣的,我認爲應該在不同瀏覽器

# click ok to confirm 
page.evaluate_script('window.confirm = function() { return true; }') 
+0

感謝您的建議,但這不適用於這種情況:(我可以在導航命令之前執行此操作(由於警報尚不存在,它什麼都不做),或者我可以在導航命令之後運行它(由於導航掛起而永遠不會到達)。 –