我们正在使用Selenium和django-selenium(SeleniumTestCase)的Python绑定来进行Selenium测试。在我们测试的页面上,有一些HTML元素在几秒钟后延迟创建。所以我们想等待它们然后继续测试。等待本身有效,但等待调用后的每个命令都失败了:
class SomeTestCase(SeleniumTestCase):
def test_something(self):
... (some testing code that works)
self.driver.wait_element_present('span.available') # this works
self.driver.wait_element_present('span.connected') # this works, too
self.driver.find_element_by_css_selector('body') # this fails
我通过selenium代码进行了调试,发现“find_element_by_css_selector”会在内部向selenium服务器发送一个HTTP请求(就像每次“检查xxx是否存在”命令一样):
http://127.0.0.1:42735/hub/session/<session-id>/element
但是此请求返回状态代码500和此响应文本:
{
"status": 13,
"value": {
"message": "JSON.parse: unexpected non-digit",
"stackTrace": [
{
"methodName": "Dispatcher.executeAs/<",
"fileName": "file:///tmp/tmpnUT34U/extensions/fxdriver@googlecode.com/components/driver_component.js",
"lineNumber": 7354
},
{
"methodName": "Resource.prototype.handle",
"fileName": "file:///tmp/tmpnUT34U/extensions/fxdriver@googlecode.com/components/driver_component.js",
"lineNumber": 7516
},
{
"methodName": "Dispatcher.prototype.dispatch",
"fileName": "file:///tmp/tmpnUT34U/extensions/fxdriver@googlecode.com/components/driver_component.js",
"lineNumber": 7463
},
{
"methodName": "WebDriverServer/<.handle",
"fileName": "file:///tmp/tmpnUT34U/extensions/fxdriver@googlecode.com/components/driver_component.js",
"lineNumber": 10152
},
{
"fileName": "file:///tmp/tmpnUT34U/extensions/fxdriver@googlecode.com/components/httpd.js",
"lineNumber": 1935
},
{
"methodName": "ServerHandler.prototype.handleResponse",
"fileName": "file:///tmp/tmpnUT34U/extensions/fxdriver@googlecode.com/components/httpd.js",
"lineNumber": 2261
},
{
"methodName": "Connection.prototype.process",
"fileName": "file:///tmp/tmpnUT34U/extensions/fxdriver@googlecode.com/components/httpd.js",
"lineNumber": 1168
},
{
"methodName": "RequestReader.prototype._handleResponse",
"fileName": "file:///tmp/tmpnUT34U/extensions/fxdriver@googlecode.com/components/httpd.js",
"lineNumber": 1616
},
{
"methodName": "RequestReader.prototype._processBody",
"fileName": "file:///tmp/tmpnUT34U/extensions/fxdriver@googlecode.com/components/httpd.js",
"lineNumber": 1464
},
{
"methodName": "RequestReader.prototype.onInputStreamReady",
"fileName": "file:///tmp/tmpnUT34U/extensions/fxdriver@googlecode.com/components/httpd.js",
"lineNumber": 1333
}
]
}
}
结果是整个测试运行阻止并在默认超时后中止。 根据{{3}},状态13表示“未知错误”,这不会使事情更清楚; - )
有没有人发现过这个?有什么方法可以解决这个问题吗?我真的不知道究竟是什么原因,我们的页面结构是干净的HTML代码。谢谢你的任何建议!
答案 0 :(得分:0)
晚会,但是 -
wait_element_present 不是Selenium绑定。它来自另一个名为MyDriver https://django-selenium.readthedocs.org/en/latest/#mydriver-class的库中的自定义类
Selenium显式等待不仅仅是一个简单的函数:http://selenium-python.readthedocs.org/waits.html#explicit-waits
find_element_by_css_selector 是针对webdriver的Selenium绑定,而MyDriver没有此名称的方法。
要使用自定义类来运行Selenium webdriver,您需要使用它提供的方法(或编写自己的方法)。在这种情况下,MyDriver有一个名为 find 的方法,它接受一个CSS选择器作为参数并返回该元素,它完成了你想要用 find_element_by_css_selector 做的事情。 https://github.com/dragoon/django-selenium/blob/master/django_selenium/testcases.py