【问题标题】:Alert confirmed in Firefox but nothing happens after警报在 Firefox 中确认,但之后没有任何反应
【发布时间】:2017-08-20 16:18:07
【问题描述】:

有一个测试选择一个单选按钮,然后单击一个删除按钮触发一个模式对话框/警报框弹出。

我正在使用 Cucumber,所以步骤如下:

When /^i confirm the alert$/ do 
      Watir::Wait.until(timeout: 10) {@browser.alert.exists?}
      puts "i see the alert"
      @browser.alert.ok 
end

我加入了那个懒惰的调试步骤,因为我认为这可能是浏览器/驱动程序问题。

我已经在 Chrome 中完成了这项工作,但对于我在这个特定脚本所处的特定环境来说,这不是一个选项。

Firefox 是我唯一的选择,接下来会发生什么:

  • 返回“我看到警报”
  • 对话在
  • 上确认

然后我收到无法定位警报 (Watir::Exception::UnknownObjectException)

我使用的是 Firefox 45 ESR / Selenium Webdriver 3.0.5

不确定这是否是 Firefox/Selenium 兼容性问题?

在警报上单击确定按钮后应用程序不执行任何操作

【问题讨论】:

  • 您能否提供(最少的)HTML/js 来重现该问题?如果升级 FF 并使用最新的geckodriver,是否存在同样的问题?

标签: ruby selenium firefox cucumber watir


【解决方案1】:

确保您使用的是 Watir 6.2.1;我们刚刚发布了一个错误修复程序,可能会为您解决此问题。

【讨论】:

  • 刚刚更新了我的 6.1.0 watir gem。那里没有运气。这很奇怪。确认警报操作适用于 Chrome,并在我的应用程序中显示正确的消息,但在 FF 中似乎没有执行确认操作。
  • 不,这有点道理,Firefox 处理警报的方式与 Chrome 略有不同。请在您的代码中设置Selenium::WebDriver.logger.level = :info 并发布输出要点。
  • @partydog 实际上修复是在 6.2.1 而不是 6.1.0 中完成的,是的,它适用于 chrome 但不适用于 Firefox 。请更新到 6.2.1,然后检查。
  • 见上面的评论@Gopal。我将我的 watir 从 6.1 更新到 6.2.1,但仍然在 FF 中看到了这个问题。找到了一个修复方法(发布在下面)。
【解决方案2】:

找到了解决办法!这很简单。我只需要将警报处理发送给 Selenium 而不是 Watir。

而不是调用 Watir::Alert 类:

@browser.alert.ok 

我只需要让 Selenium 处理它。这现在在 FF 和 Chrome 中都有效:

And(/^the user confirms the alert via selenium$/) do
    popup = @browser.driver.switch_to.alert
    popup.accept
end

【讨论】:

  • 您正在访问 selenium 代码,但您不必这样做,因为 alert.ok 实际上是通过附加检查访问该代码。看代码`def ok wait_for_exists @alert.accept @browser.after_hooks.run end`
猜你喜欢
  • 1970-01-01
  • 2019-09-30
  • 2015-08-15
  • 2021-10-02
  • 1970-01-01
  • 1970-01-01
  • 2019-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多