使用 ruby 的 Watir gem,我尝试单击一个打开 javascript 弹出窗口的按钮,然后单击弹出窗口上的“确定”,但我似乎无法做到这一点。该按钮位于框架中的框架中。我进行了广泛的搜索并阅读了 Watir维基条目 http://wiki.openqa.org/display/WTR/JavaScript+Pop+Ups关于 javascript 弹出窗口,但没有任何效果。
我认为这是因为execute_script 和click_no_wait 没有按预期工作。
例如,以下命令:
@browser.execute_script('window.alert = function() {}')
@browser.execute_script('alert("hello")')
创建一个 javascript 弹出窗口,显示“hello”,而不是不执行任何操作的预期行为。
命令:
@browser.button(:value, 'Submit').click
单击创建 JavaScript 弹出窗口的按钮。然后,脚本将挂起,直到我手动单击弹出窗口上的“确定”。
命令:
@browser.button(:value, 'Submit').click_no_wait
不单击按钮(或者单击按钮但不触发 onclick 事件)。
我也尝试过:
Timeout::timeout(1) { @browser.button(:value, 'Submit').click }
and
Thread.new { @browser.button(:value, 'Submit').click }
但超时永远不会抛出异常,导致 ruby 挂起,直到我手动单击弹出窗口上的“确定”,而当我在新线程中运行它时,Watir 不会单击。
有人可以提供帮助或提供解决方案吗?
编辑:问题是在 @browser.button.click 之后,脚本会挂起,直到弹出窗口关闭。 @browser.alert.ok 成功关闭弹出窗口,但单击按钮后脚本无法执行 @browser.alert.ok,因为它会挂起直到弹出窗口关闭。这个catch-22应该通过click_no_wait来解决,但是click_no_wait没有点击。
系统信息:
Windows 7 企业版 64 位
Internet Explorer 版本 9.0.12
watir-4.0.2-x86-mingw32
红宝石 1.9.3p286 (2012-10-12) [i386-mingw32]