我是 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 不会这样做”的答案我也可以接受。这将使我能够继续前进并寻找其他解决方案。
在评论中的问题后编辑:
对不起,该网站不公开,所以我不能发布链接。至于在 Firefox 中工作,脚本工作得很好。IE 有这个问题。这些评论让我想到:第一次导航到该站点时,我确实收到“......证书不是由受信任的......”证书错误。在提交表单之前,我在 IE 中遇到的证书错误是否会导致某种与自动化断开连接?我使用我在stackoverflow上得到的一行来点击证书错误:
browser.goto("javascript:document.getElementById('overridelink').click()")
但现在我认为这可能是问题的一部分。我已经转到我的 IE(使用 IE 9)选项并取消选中用于检查证书的安全选项,但无济于事。如果这可能导致问题,我将不得不与基础架构团队协商,以生成证书供我们在每次构建新服务器时下载。