我一直在 IE 上使用Cucumber / Watir-Webdriver就好了。在我的测试中,我转到表单字段并输入数据并单击保存按钮。所有的动作都很好。
最近,出于性能原因,我决定使用Selenium Grid 2在机器上分发测试。它适用于 FF 和 Chrome,但我开始发现 IE 存在问题。
这是问题所在:
当我使用 Selenium Grid 2 远程驱动 IE 时,当它发送击键(即 send_keys 或 .set “一些文本字符串”)时,文本正确显示在字段中, 但字段验证无法识别文本。
保存表单时,我会收到一条错误消息“请输入说明” - 但说明在那里。
如果我使用 watir-webdriver (and IE) 在本地运行测试,这可以正常工作,但只有在从 Selenium Grid 驱动测试时才会出现此问题。
以下是我使用 Grid 设置浏览器的方法:
@browser = Watir::Browser.new(:remote, :url=>"http://[myhost]:4444/wd/hub", :desired_capabilities=> browser_name)
where browser_name is currently set to ie.
在远程机器上,我设置了节点:
java -jar selenium-server-standalone-[version].jar -role node -hub [path to the above hub, ie http://[myhost]:4444/grid/register] -browser browserName="internet explorer"
测试代码本身非常简单,它登录到我们的内部应用程序,然后单击一个显示表单的按钮。在表单中,它将数据发送到字段并单击保存。
测试这样做:
Watir::Wait.until { @browser.div(:id=>"after-announcement-container").text_field(:name=>'Description').exists?}
@browser.div(:id=>"after-announcement-container").text_field(:name=>'Description').set "This is a Test"
@browser.div(:id=>'save-announcement-button').click
当我运行网格测试时:
将测试发送到机器
远程机器上的 IE 启动
IE 通过应用程序自动化
在表单中,它正确发送文本(“这是一个测试”)
IE点击保存。
此时,表格上写着“请提供描述”(那里写着“这是一个测试。”)
我试过了:
添加等待时间
使用 :tab 和 :click 之类的 send_keys 在发送文本之前先输入该字段。
我还保持 webdriver 会话打开并手动保存(单击保存),但我总是收到错误消息。即使在应用程序周围单击并单击保存 - 它仍然认为该字段为空。但是,一旦我手动键入一个键,它就可以工作。
网络驱动程序输出:
Webdriver 确实有一些输出,表明它可以正常发送文本,我可以直观地看到它的形式:
11:06:21.296 INFO - Executing: [send keys: 7 org.openqa.selenium.support.events.
EventFiringWebDriver$EventFiringWebElement@f3140943, [This is a Test]] at URL: /
session/135941c9-389d-45fa-9fed-14620a4802ca/element/7/value)
11:06:21.662 INFO - Done: /session/135941c9-389d-45fa-9fed-14620a4802ca/element/
7/value
11:06:23.192 INFO - Executing: org.openqa.selenium.remote.server.handler.Status@
4ead24d9 at URL: /status)
对我来说奇怪的部分是,如果我在本地使用 watir-webdriver,这将有效。我只有在 Grid 发送 webdriver 测试时才会遇到这个问题。
由于这是手动工作的,因此开发人员不会将此视为错误。所以我无法通过更改 JS 来解决这个问题。我希望有一个解决方案可以让它与网格一起工作。