【发布时间】:2013-09-16 23:16:52
【问题描述】:
我正在为使用 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 Kepler:构建 ID:20130614-0229
- 浏览器(手动和 webdriver 使用):Firefox 23.0.1
- 硒版本:2.35.0
更新 3:我在 github 上提供了这个 maven 项目以帮助复制:https://github.com/dkwestbr/WebdriverBug/tree/master/Webdriver
Synopsis/tl:dr; 基本上,在某些情况下,看起来好像 webdriver 正在使用不返回带有定义了 innerHTML 或样式的 HTMLElement 的方法覆盖 '$()' javascript 方法(除其他事项外)。这篇文章详细介绍了这个问题以及如何重现。
我已打开此票以跟踪问题:https://code.google.com/p/selenium/issues/detail?id=6287&thanks=6287&ts=1379519170
【问题讨论】:
-
我相信这归结为不同的 JS 引擎。您是在无头模式下运行测试,还是使用与手动测试不同的浏览器?
-
我现在不在我的工作计算机旁,但我会在早上先看看第一件事,然后回复你。
-
@MrTi - 这些测试没有以无头方式运行,它使用的是我安装的相同版本的 firefox。我正在同一浏览器上手动测试和运行自动化测试(通过启动 Firefox、检查“关于 Firefox”中的版本并暂停我的自动化测试并检查通过这种方式显示的浏览器中的相同信息来验证)。
-
这很奇怪...您的手动版本是否安装了任何扩展,或者您在启动驱动程序时是否设置了任何首选项?
-
@MrTi - 我刚刚通过在我启动的浏览器和由 selenium 启动的浏览器中启动我的调试、暂停和正常查看扩展进行测试。唯一的区别是selenium启动的安装了Firefox Webdriver 2.35.0扩展,而我打开的firefox没有扩展。两者都显示 23.0.1 的 ff 版本
标签: selenium webdriver selenium-webdriver bdd thucydides