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

时间:2012-12-17 16:39:11

标签: ruby watir watir-webdriver

使用ruby的Watir gem,我试图点击一个打开javascript弹出窗口的按钮,然后点击弹出窗口上的'ok',我似乎无法做到这一点。按钮位于框架中的框架中。我已经广泛搜索并阅读Watir wiki entry关于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 }

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

但Timeout从不抛出异常,导致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]

1 个答案:

答案 0 :(得分:1)

您可以使用警告api(watir-classicwatir-webdriver)与javascript弹出窗口进行交互。

尝试使用以下方法关闭弹出窗口:

@browser.alert.ok

更新 - 解决方法:

对于框架中的元素使用Element#click_no_wait这似乎是一个错误。我已更新Issue 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