9

似乎我尝试过的代码都没有任何影响。我的意图是通过点击“确定”按钮关闭所有可能出现的 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。

4

5 回答 5

6

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

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

有关更多详细信息,请参见:http : //watirmelon.com/2010/10/31/dismissing-pesky-javascript-dialogs-with-watir/。

于 2010-12-02T10:12:25.220 回答
0

弹出窗口对我来说是黑魔法。您是否尝试过这里的解决方案?

我还建议您在Watir-general上发布您的问题。

于 2010-02-16T11:49:27.030 回答
0

我认为您的 fx.button(:id, "OK").click 正在等待状态更改。
但是 javascript 对话框不会改变状态。
所以你的侍者将永远等待。
如果不是那样,我不知道。

该动作不会改变状态,永远不会返回它。
所以它需要点击不等待。
当我使用 watir(不是 firewatir)时,@ie.button(:id, 'OK').click_no_wait。
然后最好等待 1~3 秒弹出。
然后如你所愿。
此外,如果你想控制 msg-box(popup),需要 AutoIT。--这是等待消息框的示例,然后单击确定以显示 IE 弹出窗口--

autoit=WIN32OLE.new('AutoItX3.Control')
autoit.WinWait('Windows Internet Explorer')
autoit.WinActive('Windows Internet Explorer')
autoit.ControlClick('Windows Internet Explorer','','OK')

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

于 2010-03-24T18:22:50.817 回答
0

查看 /var/lib/gems/1.8/gems/firewatir-1.6.5/unittests/html/JavascriptClick.html (假设这是您的 firewatir gem 的安装位置)。我进行了测试,它对我有用。也许阅读测试会让您对 startClicker 应该如何工作有所了解。

于 2010-03-31T20:46:10.897 回答
0

这是很久以前问过的,所以我只是添加了一些更新的东西,为我做的

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

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

于 2018-01-16T17:59:56.003 回答