Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Watir:在JavaScript警报上单击OK?_Javascript_Ruby_Ubuntu_Watir_Firewatir - Fatal编程技术网

Ruby Watir:在JavaScript警报上单击OK?

Ruby Watir:在JavaScript警报上单击OK?,javascript,ruby,ubuntu,watir,firewatir,Javascript,Ruby,Ubuntu,Watir,Firewatir,似乎我试过的代码都没有任何影响。我的意图是关闭所有可能通过点击“OK”按钮出现的JavaScript提示。问题是,我的脚本对出现的提示没有影响。换句话说,它什么也不做 以下是我所拥有的: fx = FireWatir::Firefox.start(somepage) fx.startClicker("OK") fx.button(:id, "OK").click fx.button(:id, "CONFIRM").click HTML: <script type="text/javasc

似乎我试过的代码都没有任何影响。我的意图是关闭所有可能通过点击“OK”按钮出现的JavaScript提示。问题是,我的脚本对出现的提示没有影响。换句话说,它什么也不做

以下是我所拥有的:

fx = FireWatir::Firefox.start(somepage)
fx.startClicker("OK")
fx.button(:id, "OK").click
fx.button(:id, "CONFIRM").click
HTML:

<script type="text/javascript">
    alert("Alert!");
    window.confirm("Confirm?");
</script>

警惕(“警惕!”);
确认(“确认?”);
提示中的文本可能会更改,我的意图是,无论警报/确认提示中的内容是什么,都要点击OK


PS:我正在运行Ubuntu。

弹出窗口对我来说是黑魔法。你试过这里的解决方案吗

我还建议将您的问题发布在。

我认为您的fx.按钮(:id,“OK”)。单击已更改等待状态。
但javascript对话框不会更改状态。
因此,您的水将永远等待。
如果不是那样,我不知道

该操作不会更改状态,永远不会返回它。
因此,它需要单击“无需等待”。
当我使用watir(不是firewatir)时,@ie.button(:id,'OK')。单击“否”等待。
然后最好等待1~3秒,等待弹出。
那随你的便。
此外,如果您想要控制消息框(弹出),需要自动控制它。 --这是等待消息框的示例,单击ok弹出IE窗口--

有可能我完全不明白你的意思。
如果是这样,请忽略此项。

检查/var/lib/gems/1.8/gems/firewatir-1.6.5/unittests/html/JavascriptClick.html(假设您的firewatir gem安装在那里)。我进行了测试,它对我有效。也许阅读测试会让你了解startClicker的工作原理

最好的方法是阻止弹出窗口触发

require 'watir'
b = Watir::Browser.start "http://somepagewithdialogs"
# don't return anything for alert
b.execute_script("window.alert = function() {}")

# return some string for prompt to simulate user entering it
b.execute_script("window.prompt = function() {return 'my name'}")

# return null for prompt to simulate clicking Cancel
b.execute_script("window.prompt = function() {return null}")

# return true for confirm to simulate clicking OK
b.execute_script("window.confirm = function() {return true}")

# return false for confirm to simulate clicking Cancel
b.execute_script("window.confirm = function() {return false}")

# interact with some element which would trigger the pop up
b.button(:id => "dialogTrigger").click

请参阅:了解更多详细信息。

这是一个永恒的问题,所以我只是添加了一些更新的内容,为我做到了这一点

@browser.alert.exists?
@browser.alert.ok
@browser.alert.close

第一个将返回一个布尔值 第二个选项将确定提示您执行的任何操作 第三个将关闭警报,不使用

,使用上面的第二个链接中为我工作的解决方案#3。我稍微修改了startClicker方法,以获取一个浏览器变量参数,但这是最终有效的方法。
require 'watir'
b = Watir::Browser.start "http://somepagewithdialogs"
# don't return anything for alert
b.execute_script("window.alert = function() {}")

# return some string for prompt to simulate user entering it
b.execute_script("window.prompt = function() {return 'my name'}")

# return null for prompt to simulate clicking Cancel
b.execute_script("window.prompt = function() {return null}")

# return true for confirm to simulate clicking OK
b.execute_script("window.confirm = function() {return true}")

# return false for confirm to simulate clicking Cancel
b.execute_script("window.confirm = function() {return false}")

# interact with some element which would trigger the pop up
b.button(:id => "dialogTrigger").click