我是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)选项并取消选中用于检查证书的安全选项,但无济于事。如果这可能导致问题,我将不得不与基础架构团队协商生成证书,以便我们在每次构建新服务器时下载。
答案 0 :(得分:6)
好的,我想在阅读了数百个帖子和数小时的Google搜索后,我终于找到了解决我的问题的方法:browser.execute_script。
browser.execute_script("showLogin();")
就这么简单。使用browser.goto挂载加载页面和webdriver超时。使用execute_script非常有效!