如何使用Selenium在Firefox中处理安全警报
我正在使用带有ruby的selenium-webdriver来编写自动化测试。
Chrome和chromedriver二进制文件工作非常好,但是我遇到了与浏览器配置相关的Firefox问题,这使我的测试失败,而他们通过了Chrome。
在Firefox中执行测试时,有时我会收到有关此消息的警报:
虽然此页面已加密,但您输入的信息将通过未加密的连接发送,并且可以由第三方轻松读取
它打破了执行。 有没有办法在最近的Firefox版本(10+)中禁用此警告或使用Selenium处理此行为?
在找到解决方案的过程中,我想我可能在Capybara(v1.1.2)中发现了一个错误。
我设法使用以下方法来解决这个问题,而不是使用capybara的click
(这不允许我捕获exception),我开始使用selenium-webdriver中的click
方法。
当Firefox触发此警报框时,似乎是一个包含该消息的字符串
虽然此页面已加密,但您输入的信息将通过未加密的连接发送,并且可以由第三方轻松读取
由于object.native.click
返回,否则返回字符串
好
被退回。
# Define the click method in ruby and call it when you're executing a 'click' # Public: Click the object. # # object - Capybara::Node::Element object to click. def click object return_string = object.native.click check_firefox_alertbox if return_string == "ok" end def check_firefox_alertbox if @current_browser == :firefox @session.driver.browser.switch_to.alert.accept end rescue Exception => e puts e end
这是你可以做的。 在firefox中键入about:config
。 您将看到许多选项(一旦您通过警告消息)。
你必须寻找security.warn_leaving_secure; 和security.warn_leaving_insecure 。 让他们两个都是假的。 你会很高兴。
请注意:这只适用于您修改过的FF实例,因此您需要使用firefox配置文件来启动此实例。
希望这可以帮助。
实际上这只是一个评论,但我需要超过50才能发表评论。我想通过’打破’执行你的意思是Ruby脚本的权利吗? Firefox会发生什么? 需要点击才能继续? 如果是这种情况,您可以通过在BEGIN和RESCUE子句之间插入敏感代码(在它中断的地方)之后捕获Ruby错误来即兴创作。这样的事情……
BEGIN . . Code that is giving you a headache . . RESCUE . Capture the exception and give Ruby a chance to continue the script normally. . . END
或者,如果你不喜欢上面的解决方案,你可以去Firefox,然后输入关于:config的地址框。 过滤’ security.warn ‘并将所有布尔变量设置为false。 很好的摆脱,手指交叉;)