Selenium 2.4.0,如何检测警报的存在

14

在使用 Selenium 2.4.0 之前,我有以下代码可以正常工作:

alert = page.driver.browser.switch_to.alert
if alert.text
  ....
end

Selenium 2.4.0中包含更改 "* 在switch_to.alert中提升,当没有警报时。",因此我会得到一个No alert is present (Selenium::WebDriver::Error::NoAlertOpenError)异常。

我如何使用selenium-web-driver 2.4.0检查警报的存在?

5个回答

23

这里有一个选项:

driver.switch_to.alert.accept rescue Selenium::WebDriver::Error::NoAlertOpenError

如果有警告框出现,这会点击确定按钮;否则,它会优雅地(静默)失败。


3
很抱歉,这是我使用 Capybara 做这件事情的最佳方式。但是我必须稍作修改:page.driver.browser.switch_to.alert.accept rescue Selenium::WebDriver::Error::NoAlertPresentError - jackocnr
1
非常感谢大家!!!我今天花了好几个小时来尝试运行我的规格说明,而这个方法解决了我的问题 :) - Rebekah Waterbury
1
在我看来,这个答案应该被接受,同时感谢@jackocnr的建议。 - mattsch

9

我在Ruby中实现了一种处理这种情况的方法,我认为它相当简洁:

def alert_present?
  begin
    session.driver.browser.switch_to.alert
    puts "Alert present! Switched to alert."
    true
  rescue
    puts "No alert present."
    return false
  end
end

我应该补充一下:这里的“session”代表一个Capybara会话,但是如果省略“session”部分,显然也可以只使用Selenium。 - aceofbassgreg
对于所有的Selenium用户:您可以使用driver.switch_to.alert,其中driver是一个Selenium::WebDriver对象。 - dcts

9
WebDriverWait wait = new WebDriverWait(driver, 18);
wait.until(ExpectedConditions.alertIsPresent());

1
status = true
while (status)
    alert = driver.switch_to.alert rescue "exception happened"
    if (alert == "exception happened")
        status = true
        alert = "nothing happened"
    else
        status = false
    end
end

没有直接的方法来检查是否有警报。使用上述方法,您可以检查是否有警报。一旦警报出现,它将退出while循环。


0

我使用了

driver.switch_to.alert.accept rescue 
Selenium::WebDriver::Error::NoAlertOpenError

适用于selenium-webdriver 3.142.3


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接