Ruby Watir:在JavaScript提醒上单击确定?

时间:2010-02-12 02:23:49

标签: javascript ruby ubuntu watir firewatir

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

5 个答案:

答案 0 :(得分: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/

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我认为你的fx.button(:id,“OK”)。点击等待状态改变了。
但javascript对话框不会改变状态 所以你的watir会永远等待 如果不是那样的话,我不知道。

动作不会改变状态,永远不会返回。
所以需要点击不等 当我使用watir(不是firewatir)时,@ ie.button(:id,'OK')。click_no_wait。
然后最好等一下1~3秒弹出。
那么你喜欢。
而且如果你想控制msg-box(弹出窗口),需要AutoIT。 - 这是等待msg-box的示例,然后单击确定IE弹出窗口 -

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

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

答案 3 :(得分:0)

查看/var/lib/gems/1.8/gems/firewatir-1.6.5/unittests/html/JavascriptClick.html(假设您的firewatir gem已安装在哪里)。我跑了测试,它对我有用。也许阅读测试会让你深入了解startClicker应该如何工作。

答案 4 :(得分:0)

这是一个永恒的问题,所以我只是添加一些更新的东西,为我做了

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

第一个将返回一个布尔值 第二个将会提示你做什么动作 第三个将关闭警报而没有