Watir帮助:click-no-wait和execute_script无法按预期工作

使用ruby的Watir gem,我试图点击一个打开javascript弹出窗口的按钮,然后点击弹出窗口上的’ok’,我似乎无法做到这一点。 按钮位于框架中的框架中。 我已经广泛搜索并阅读有关javascript弹出窗口的Watir wiki条目但没有任何效果。
我认为这是因为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 } 

  Thread.new { @browser.button(:value, 'Submit').click } 

但Timeout从不抛出exception,导致ruby挂起,直到我在弹出窗口中手动单击’ok’,并且当我在新线程中运行它时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
ruby 1.9.3p286(2012-10-12)[i386-mingw32]

有一个警告api( watir-classic和watir-webdriver ),您可以使用它来与javascript弹出窗口进行交互。

尝试关闭弹出窗口:

 @browser.alert.ok 

更新 – 解决方法:

对于框架中的元素使用Element#click_no_wait这似乎是一个错误。 我已更新了第45期 ,并将尝试提交补丁。

同时,在脚本开头添加以下猴子补丁应该可以解决问题(即click_no_wait不应该等待):

 require 'watir-classic' Watir::IE.new(true) module Watir class Frame def attach_command tag_name = @specifiers[:tag_name].join("' << '") @container.page_container.attach_command + ".frame(:tag_name => Array.new << '#{tag_name}', :unique_number => #{unique_number})" end end end