我正在为使用 jbehave/selenium/webdriver 的 bdd 框架编写故事,并且遇到问题,即测试在运行故事时遇到错误,但在手动运行时似乎很好。我遇到了一个问题,当我在 firefox 上手动运行测试与通过 selenium web 驱动程序在同一系统/版本的 firefox 上运行测试时,我正在测试的功能的 javascript 行为略有不同,这种差异导致 js 错误。
我已经调试过,基本上问题的根源似乎是var request_XML_container = $('div_appendpoint_id');
当我手动运行测试与通过 bdd 框架运行时返回的结果不同。
var request_XML_container = $('div_appendpoint_id');
request_XML_container.innerHTML = encoded_xml_from_request;
var pos = method_to_get_position('id_of_place_div_should_be_appended_to');
// JS exception is thrown saying that style is not defined **ONLY**
// when running through web driver. Running test manually on
// same system and same browser works fine.
request_XML_container.style.left = (pos[0] - 300) + 'px';
request_XML_container.style.top = (pos[1] + 25) + 'px';
request_XML_container.style.display = "block";
为什么这在手动运行时会正常工作,这var request_XML_container = $('div_appendpoint_id');
将返回一个定义了样式的项目,但是当通过 webdriver 运行时,元素的样式属性不会被定义?
更新:我原本以为这是在更新 iframe,但我读错了标记,我看到的 iframe 是响应附加到的元素的同级 - 而不是父级。我试图简单地将响应附加到 div。老实说,这只会让事情变得更加混乱,因为通过 id 获取 div 应该非常简单,我现在确定为什么 webdriver 在这种情况下会产生不同的返回元素。
更新 2: 复制步骤和有关我所在系统的信息:
- 使用 webdriver 导航到这个 url: http: //fiddle.jshell.net/C3VB5/11/show/
- 让 webdriver 单击按钮。它不应该工作
- 再次运行测试,但暂停在代码处放置断点以单击驱动程序
- 单击 webdriver 打开的浏览器上的按钮。它不应该工作
- 在 webdriver 打开的浏览器上刷新浏览器页面。现在,它应该可以工作了。
- 系统详情:
- 操作系统:OS X 10.8.5 (12F37)
- IDE:Eclipse 开普勒:内部版本号:20130614-0229
- 浏览器(手动和 webdriver 使用):Firefox 23.0.1
- 硒版本:2.35.0
更新 3:我在 github 上提供了这个 maven 项目以帮助复制:https ://github.com/dkwestbr/WebdriverBug/tree/master/Webdriver
概要/tl:博士;基本上,在某些情况下,看起来好像 webdriver 正在使用不返回带有 innerHTML 或定义的样式(以及其他内容)的 HTMLElement 的方法覆盖 '$()' javascript 方法。这篇文章详细介绍了这个问题以及如何重现。
我已经打开这张票来跟踪问题:https ://code.google.com/p/selenium/issues/detail?id=6287&thanks=6287&ts=1379519170