1

在我的测试结束时,Capybara 会自动导航到“about:blank”以设置下一个测试。有时,如果用户离开页面(这是预期的),我正在测试的应用程序会引发弹出警报。我有一些代码来处理这个:

  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 上导航命令挂起,我认为是因为弹出窗口。有人知道解决方法吗?

4

2 回答 2

1

目前在任何版本的 Selenium 语言绑定中都没有简单的解决方法。这是 Selenium 团队没有兴趣解决的已知问题。从根本上说,这是由于 Safari 的架构以及 Safari 驱动程序的架构造成的。

Safari 驱动程序扩展的 JavaScript 不知道大多数显示为模态 Cocoa 层窗口的警报、弹出窗口和对话框。它也无法与它们交互。

有一种方法,但这并不容易,而且没有人做过。

你需要使用可可。

所以在这种情况下你会想要使用 RubyCocoa。(或 PyObjC,如果你使用 Python)那么你可能还想要一个实际用 Objective-C 编写的 sidecar 应用程序。诀窍是使用 AX(可访问性 API)和一个单独的进程来观察是否有一个警报作为前窗口,并戳它的标签和按钮的文本,这些文本对 AX API 可见。AX API 可能通过 ScriptingBridge 在 RubyCocoa 中公开。但是,您需要将您的“应用程序”添加到安全首选项窗格的允许控制计算机的事物列表中。

这样,您就可以检测到窗口并进行处理。

它在网站上可能相当脆弱,但如果构建良好,您可以处理预期的条件。

于 2016-04-02T13:58:14.190 回答
0

您可以尝试像这样确认,我认为这应该跨浏览器工作

# click ok to confirm
page.evaluate_script('window.confirm = function() { return true; }')
于 2016-02-29T01:57:41.080 回答