gpt4 book ai didi

javascript - 无法在 Ruby Watir 的 Firefox 浏览器中控制 Javascript 弹出窗口

转载 作者:太空宇宙 更新时间:2023-11-03 16:17:07 25 4
gpt4 key购买 nike

在页面中,当我单击某个按钮时,我会看到一个带有“确定”和“取消”按钮的 javascript 弹出窗口。我想使用 Ruby Watir 脚本单击该弹出窗口中的“确定”按钮。所以我使用下面的代码。我收到 FAIL 消息,因为 javascript 弹出窗口在 Firefox 浏览器中出现并在几分之一秒内消失。因此,为了检查脚本是否捕捉到警报,我打印了 p browser.alert.present? 并且我得到它是错误的。如何处理这样的问题?

if (certain_button_click)
p browser.alert.present? #I get this as 'false'

browser.wait_until(30) {
browser.alert.present?
} rescue nil

p browser.alert.present? #I get this as 'false'

if browser.alert.present?
browser.alert.ok
message = 'Click Ok - PASS'
else
message = 'Click Ok - FAIL'
end
end

请帮忙。提前致谢。

谢谢,阿什温

最佳答案

老实说,我不知道你在这里试图完成什么,但我看到你的代码在做什么。

只要出现警报,Selenium 就会引发 UnhandledAlertError,但驱动程序会采取与警报无关的操作。你的代码正在做的是拯救那个异常(好吧,所有的异常,当你知道你想要避免哪个异常时你应该避免这样做)。 Firefox 有 different behavior在这方面比 Chrome 更好,因为它在引发异常时也会关闭警报。因此,您的代码完全按照您的指示执行。

如果您使用 Watir 6.0,则不必再指定等待时间。如果您只想在警报出现时关闭它,此代码将自动等待警报出现并在出现时单击“确定”。如果警报从未出现,它将给出超时错误。

element_causing_alert.click
browser.alert.ok

如果您尝试测试警报是否显示,则可以使用此代码:

begin
browser.alert.ok
true
rescue Watir::Wait::TimeoutError
false
end

或者如果你想指定超时前的等待时间:

begin
browser.alert.wait_until(timeout: 5, &:present?).ok
true
rescue Watir::Wait::TimeoutError
false
end

关于javascript - 无法在 Ruby Watir 的 Firefox 浏览器中控制 Javascript 弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41087758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com