我正在为使用jbehave / selenium / webdriver的bdd框架编写一个故事,并且在运行故事时测试遇到错误但在手动运行时看起来很好。我遇到了一个问题,当我在firefox上运行测试时,我正在测试的功能的javascript略有不同,在同一系统/ firefox版本上通过selenium web驱动程序运行测试,这种差异导致js错误。 / p>
我已经调试了,基本上问题的根源似乎是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运行时,不会定义元素的样式属性? < / p>
UPDATE :我原本以为这是在更新iframe,但是我读错了标记,我看到的iframe是一个兄弟 - 而不是父亲 - 响应所在的元素附加到。我试图简单地将响应附加到div。说实话,这只会让事情变得更加混乱,因为通过id获取div应该是非常直接的,我现在确定为什么webdriver会在这种情况下产生不同的返回元素。
更新2 :重现的步骤和我正在使用的系统的信息:
更新3 :我在github上提供了这个maven项目,以帮助复制:https://github.com/dkwestbr/WebdriverBug/tree/master/Webdriver
概要/ tl:dr; 基本上,在某些情况下,似乎webdriver使用不返回带有innerHTML或样式定义的HTMLElement的方法覆盖'$()'javascript方法(除其他事项外)。这篇文章详细介绍了这个问题以及如何重现。
我已打开此故障单来跟踪问题:https://code.google.com/p/selenium/issues/detail?id=6287&thanks=6287&ts=1379519170
答案 0 :(得分:0)
我已经确认这是Thucydides框架的一个错误(可以理解,因为它们仍然不是1.0版本)。