我是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>
Run Code Online (Sandbox Code Playgroud)
我需要点击该区域来显示登录屏幕(这是同一页面,一个表格真的,只是隐藏).我用VBScript整天做这个:
objExplorer.Document.GetElementsByTagName("area")(0).click
Run Code Online (Sandbox Code Playgroud)
但是,使用Watir-Webdriver,browser.area(:index,0).click什么都不做.
puts browser.area(:index, 0).shape
=>RECT
puts browser.area(:index, 0).coords
=>280,390,384,432
Run Code Online (Sandbox Code Playgroud)
所以,我知道脚本可以"看到"区域元素并读取其属性.它对click事件没有任何作用.
如果我在href本身使用browser.goto:
browser.goto("javascript:showLogin();")
Run Code Online (Sandbox Code Playgroud)
登录变得可见,但我无法与元素交互(设置用户名和密码的文本字段).我正在查看打开开发人员工具窗口的页面(查看HTML),它只是说"正在加载...".
这是我被困的地方.有趣的是,如果我使用登录表单的名称并执行以下操作:
browser.form(:name, "LoginForm").submit
Run Code Online (Sandbox Code Playgroud)
我从用户名和密码为空的表单中获取弹出消息,因此仍然存在一些交互.
当然,如果我手动输入用户名/密码,即使表示"正在加载......",我也可以提交表格.
我理解"when_present.click"和等待浏览器的其他技术; 这些都行不通.我的困境是我无法点击该区域,如果我在javascript上使用goto,则浏览器会忽略Watir的自动化.
谢谢你的帮助.即使回答"抱歉,Watir或Webdriver不会这样做"也是我可以接受的.它将允许我继续前进并寻找其他解决方案.
在评论中的问题后编辑:
对不起,该网站不公开,所以我无法发布链接.至于在Firefox中工作,脚本工作得很好.IE正在解决这个问题.这些评论让我想到:我第一次导航到网站时,确实得到了"......不是由可信任的证书......"证书错误.我在IE中获得的证书错误是否会在呈现表单之前导致与自动化的某种断开?我使用stackoverflow上的一行来点击证书错误:
browser.goto("javascript:document.getElementById('overridelink').click()")
Run Code Online (Sandbox Code Playgroud)
但现在我想也许这可能是问题的一部分.我已经转到我的IE(使用IE 9)选项并取消选中用于检查证书的安全选项,但无济于事.如果这可能导致问题,我将不得不与基础架构团队协商生成证书,以便我们在每次构建新服务器时下载.