gpt4 book ai didi

ruby - Watir 帮助 : click-no-wait and execute_script not working as expected

转载 作者:太空宇宙 更新时间:2023-11-03 16:32:14 25 4
gpt4 key购买 nike

使用 ruby​​ 的 Watir gem,我试图单击一个打开 javascript 弹出窗口的按钮,然后单击弹出窗口上的“确定”,但我似乎无法做到这一点。该按钮位于框架中的框架中。我广泛搜索并阅读了 Watir wiki entry关于 javascript 弹出窗口,但没有任何效果。
我认为这是因为 execute_script 和 click_no_wait 没有按预期工作。
例如,以下命令:

    @browser.execute_script('window.alert = function() {}')
@browser.execute_script('alert("hello")')

创建一个显示“你好”的 javascript 弹出窗口,而不是什么都不做的预期行为。
命令:

    @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​​ 挂起,直到我在弹出窗口中手动单击“确定”,而当我在新线程中运行它时 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-classicwatir-webdriver),您可以使用它与 j​​avascript 弹出窗口进行交互。

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

@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

关于ruby - Watir 帮助 : click-no-wait and execute_script not working as expected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13918184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com