【发布时间】:2012-11-13 16:12:19
【问题描述】:
我是 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>
我需要单击该区域以显示登录屏幕(这是同一页面,实际上是一个表单,只是隐藏了)。我整天都在用 VBScript 做这个:
objExplorer.Document.GetElementsByTagName("area")(0).click
但是,使用 Watir-Webdriver,browser.area(:index, 0).click 什么都不做。
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
我从表单中得到了用户名和密码为空的弹窗信息,所以还是有一些交互的。
当然,如果我手动输入用户名/密码,即使显示“正在加载...”,我也可以正常提交表单。
我了解“when_present.click”和其他等待浏览器的技巧;这些不起作用。我的困境是我无法点击该区域,如果我在 javascript 上使用 goto,浏览器就会忽略来自 Watir 的自动化。
感谢您的帮助。即使是“对不起,Watir 或 Webdriver 不会这样做”的答案我也可以接受。这将使我能够继续前进并寻找其他解决方案。
在 cmets 问题后编辑:
对不起,这个网站不是公开的,所以我不能发布链接。 至于在 Firefox 中工作,脚本工作得很好。 IE 有这个问题。 cmets 让我想到:第一次导航到该站点时,我确实收到“...证书不是由受信任的...”颁发的证书错误。在提交表单之前,我在 IE 中遇到的证书错误是否会导致某种与自动化断开连接?我使用我在 stackoverflow 上得到的一行来点击证书错误:
browser.goto("javascript:document.getElementById('overridelink').click()")
但现在我认为这可能是问题的一部分。我已经转到我的 IE(使用 IE 9)选项并取消选中用于检查证书的安全选项,但无济于事。如果这可能导致问题,我将不得不与基础架构团队协商生成证书,以便我们在每次构建新服务器时下载。
【问题讨论】:
-
网站是公开的吗?链接到它会有所帮助。
-
似乎支持。使用 Watir-Webdriver,单击带有
href = "javascript:alert('test');"的区域会按预期创建警报。也许您看到一些浏览器兼容性问题?例如,href = "javascript:alert();"(注意没有传递给 alert() 的参数),在 IE 中将显示没有消息的警报,而在 Firefox 中它什么也不做。在 Firefox 中手动单击该区域是否按预期工作?
标签: ruby watir watir-webdriver