Selenium在等待元素后冻结(Python)

2024-10-04 03:24:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我们正在使用Selenium和django-Selenium(SeleniumTestCase)的Python绑定来进行硒测试。在我们的页面上有一些元素在延迟后被创建出来。所以我们要等他们,然后继续测试。等待本身有效,但等待调用后的每个命令都失败:

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请求(就像每个“check if xxx is there”命令一样):

^{pr2}$

但此请求返回状态代码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表示“未知错误”,这并不能使事情变得更清楚;-)

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


Tags: comdriverjscomponentsextensionsfilenametmpfile
1条回答
网友
1楼 · 发布于 2024-10-04 03:24:05

派对迟到了,但是

wait_element_present不是硒结合。它来自另一个名为MyDriverhttps://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选择器作为参数并返回元素,这就完成了您希望通过使用CSS选择器查找元素的操作。 https://github.com/dragoon/django-selenium/blob/master/django_selenium/testcases.py

相关问题 更多 >