gpt4 book ai didi

python - Selenium 在等待元素后卡住(Python)

转载 作者:太空宇宙 更新时间:2023-11-03 12:08:25 25 4
gpt4 key购买 nike

我们正在使用 Selenium 和 django-selenium (SeleniumTestCase) 的 Python 绑定(bind)来进行 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
}
]
}
}

结果整个测试运行阻塞,并在默认超时后中止。根据https://code.google.com/p/selenium/wiki/JsonWireProtocol状态 13 表示“UnknownError”,这并不能使事情变得更清楚;-)

有没有人也发现了这个?有什么办法可以解决这个问题吗?我真的不知道确切的原因是什么,我们的页面结构是干净的 html 代码。感谢您的任何建议!

最佳答案

派对迟到了,但是——

wait_element_present 不是 Selenium 绑定(bind)。它来自另一个名为 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 绑定(bind),而 MyDriver 没有此名称的方法。

要使用自定义类来运行 Selenium webdriver,您需要使用它提供的方法(或编写您自己的方法)。在这种情况下,MyDriver 有一个名为 find 的方法,它接受 CSS 选择器作为参数并返回元素,这完成了您希望使用 find_element_by_css_selector 执行的操作。 https://github.com/dragoon/django-selenium/blob/master/django_selenium/testcases.py

关于python - Selenium 在等待元素后卡住(Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18204048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com