如果打开 JavaScript 弹出窗口,如何编写 Watir 条件循环以单击“确定”按钮

How can I write a Watir conditional loop to click the "OK" button if a JavaScript popup opens?

本文关键字:循环 条件 单击 按钮 确定 Watir 何编写 JavaScript 窗口 如果      更新时间:2023-09-26

所以在某些测试用例中,我的应用程序会抛出一个JavaScript弹出窗口,指示当月不能再写字母,这会中断我的Watir自动化。

有没有办法使用 Watir 捕获 javascript 弹出窗口,然后单击"确定"按钮并继续?

这是我到目前为止所拥有的:

# Send New Letter
browser.link(:class,'new-message-button').click
browser.frame(:id,'letterText_ifr').click
javascript_dialog.button('OK').click # <= I need help here with conditional
browser.send_keys 'This is a test'
browser.button(:id,'send-button').click
browser.link(:id,'sign_out').click

如果您尝试了诸如期望JS对话框在此处并使用发送信件的代码来挽救它(如果失败)之类的事情,该怎么办?

browser.frame(:id,'letterText_ifr').click_no_wait
begin
  javascript_dialog.button('OK').click # <= I need help here with conditional
rescue
  browser.send_keys 'This is a test'
  browser.button(:id,'send-button').click
end
browser.link(:id,'sign_out').click

它不是很优雅,但它可能会做你需要的

也许我误解了,但显而易见的答案似乎是:

javascript_dialog.button('OK').click if javascript_dialog.button('OK').exists?

如果对话框出现的时间不是随机的,而是众所周知/定义的,则可以使用以下一些时间:

until javascript_dialog.button('OK').exists? do 
    sleep 1 
end 
javascript_dialog.button('OK').click

sleep 1 until javascript_dialog.button('OK').exists?
javascript_dialog.button('OK').click

javascript_dialog.button('OK').when_present.click

javascript_dialog.button('OK').wait_until_present
javascript_dialog.button('OK').click

一旦我尝试点击 JavaScript 弹出窗口中的按钮,Ruby 就会失去浏览器的焦点并崩溃。

我最终只是忽略了这个错误,并注销以在另一个可能尚未发送信件的人身上重新运行测试。 (4月30日是本周内,因此会导致警报显示)请参阅下面的新代码:

if browser.text.include?('30-Apr')
  browser.link(:id,'sign_out').click
else
  browser.send_keys 'This is a test'
  browser.button(:id,'send-button').click
end