Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.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 Webdriver是否支持单击目标为javascript的链接?_Ruby_Watir_Watir Webdriver - Fatal编程技术网

Ruby Watir Webdriver是否支持单击目标为javascript的链接?

Ruby Watir Webdriver是否支持单击目标为javascript的链接?,ruby,watir,watir-webdriver,Ruby,Watir,Watir Webdriver,我是Ruby和Watir Webdriver的新手。我有一套用VBScript编写的网站自动化软件,我想把它转换成Ruby/Watir,因为我现在必须支持Firefox。我发现我真的很喜欢Ruby,我正在研究Watir,但我花了一周的时间试图让Webdriver显示我的登录屏幕 <body onload="showMessage('true')"><div id="login"><div id="message"><map name="accept"&g

我是Ruby和Watir Webdriver的新手。我有一套用VBScript编写的网站自动化软件,我想把它转换成Ruby/Watir,因为我现在必须支持Firefox。我发现我真的很喜欢Ruby,我正在研究Watir,但我花了一周的时间试图让Webdriver显示我的登录屏幕

<body onload="showMessage('true')"><div id="login"><div id="message"><map name="accept">

<area href="javascript:showLogin();" shape="rect" coords="280,390,384,432" />

</map></div></div></body>
该网站以一个带有“我同意”区域的“警告屏幕”开始。用户单击“我同意”,并显示一个登录屏幕

<body onload="showMessage('true')"><div id="login"><div id="message"><map name="accept">

<area href="javascript:showLogin();" shape="rect" coords="280,390,384,432" />

</map></div></div></body>
但是,使用Watir Webdriver,browser.area(:index,0)。单击不执行任何操作

puts browser.area(:index, 0).shape
=>RECT

puts browser.area(:index, 0).coords
=>280,390,384,432
因此,我知道脚本可以“看到”区域元素并读取其属性。它只是与单击事件无关

如果我在href上使用browser.goto:

browser.goto("javascript:showLogin();")
登录变得可见,但我无法与元素交互(为用户名和密码设置文本字段)。我在打开开发者工具窗口(查看HTML)的情况下查看页面,页面上只显示“加载…”

这就是我被困的地方。有趣的是,如果我使用登录表单的名称并执行以下操作:

browser.form(:name, "LoginForm").submit
我从表单中得到弹出消息,用户名和密码为空,因此仍然存在一些交互

当然,如果我手动输入用户名/密码,即使表单上写着“正在加载…”,我也可以提交表单

我了解“当你出现时,点击”和其他等待浏览器的技巧;这些不起作用。我的困境是我不能点击这个区域,如果我在javascript上使用goto,浏览器就会忽略来自Watir的自动化

谢谢你的帮助。我甚至可以接受“对不起,Watir或Webdriver不会这么做”的回答。这将使我能够继续前进,寻找其他解决办法

在评论中的问题后编辑:

很抱歉,该网站不是公开的,所以我无法发布链接。 至于在Firefox中工作,脚本工作得很好。我有这个问题。这些评论让我想到:在第一次导航到该站点时,我确实收到了一个“…证书不是由受信任的…”颁发的”证书错误。IE中的证书错误是否会导致在提交表单之前与自动化系统断开某种连接?我使用stackoverflow上的一行点击通过证书错误:

browser.goto("javascript:document.getElementById('overridelink').click()")

但现在我想这可能是问题的一部分。我已转到我的IE(使用IE 9)选项并取消选中用于检查证书的安全选项,但没有结果。如果这可能是问题的原因,我将不得不与基础设施团队协商,以便在他们每次构建新服务器时生成证书供我们下载。

好的,我想在阅读了数百篇文章和数小时的谷歌搜索后,我终于找到了解决问题的方法:browser.execute\u脚本

browser.execute_script("showLogin();")

就这么简单。使用browser.goto加载页面时挂起,webdriver超时。使用execute_脚本非常有效

这个网站是公共的吗?链接到它会有所帮助。它似乎受到支持。使用Watir Webdriver,单击带有
href=“javascript:alert('test');”
的区域,按预期创建了警报。也许您看到了一些浏览器兼容性问题?例如,IE中的
href=“javascript:alert();”
(注意,没有参数被传递到alert()),将显示没有消息的警报,而在Firefox中,它将什么也不做。在Firefox中手动点击该区域是否能像预期的那样工作?很好!我在找这样的东西。感谢您发布您的解决方案,我不知道
.execute\u脚本