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

时间:2012-04-30 17:42:12

标签: javascript ruby watir

因此,在某些测试用例中,我的应用程序将抛出一个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

4 个答案:

答案 0 :(得分:2)

如果您尝试将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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

如果对话框外观的时间不是随机的,但非常熟知/已定义,您可以使用其中一些:

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

答案 3 :(得分:0)

一旦我尝试点击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