1

我正在为使用 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: 复制步骤和有关我所在系统的信息:

  1. 使用 webdriver 导航到这个 url: http: //fiddle.jshell.net/C3VB5/11/show/
  2. 让 webdriver 单击按钮。它不应该工作
  3. 再次运行测试,但暂停在代码处放置断点以单击驱动程序
  4. 单击 webdriver 打开的浏览器上的按钮。它不应该工作
  5. 在 webdriver 打开的浏览器上刷新浏览器页面。现在,它应该可以工作了。
  6. 系统详情:
    • 操作系统: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

4

1 回答 1

0

我已经确认这是 Thucydides 框架的一个错误(可以理解,因为它们还不是 1.0 版本)。

可以在此处跟踪问题:https ://java.net/jira/browse/THUCYDIDES-203

于 2013-09-25T15:05:02.900 回答