在 PyCharm 中调试时在 EventFiringWebDriver 中触发的异常

Posted

技术标签:

【中文标题】在 PyCharm 中调试时在 EventFiringWebDriver 中触发的异常【英文标题】:Exception triggered in EventFiringWebDriver when debugging in PyCharm 【发布时间】:2021-06-22 06:20:42 【问题描述】:

PyCharm 中使用 EventFiringWebDriver 调试 Selenium 脚本,导致记录异常:

 'WebDriver' object has no attribute '__len__'

它会减慢 IDE,但不会破坏(停止)脚本。

这里是完整的代码:

from selenium import webdriver
from selenium.webdriver.support.event_firing_webdriver import EventFiringWebDriver
from selenium.webdriver.support.events import AbstractEventListener


class ScreenshotListener(AbstractEventListener):
    def on_exception(self, exception, driver):
        print(exception)


driver = webdriver.Chrome('chromedriver.exe')
ef_driver = EventFiringWebDriver(driver, ScreenshotListener())
ef_driver.get('https://google.com/')
title = ef_driver.title
driver.quit()

assert "Google", title

当我在标准模式下运行附加脚本时,一切正常。

但使用 PyCharm Debug 运行(这里是 Debug 控制台开头的输出):

C:\Pro\selenium-debug\venv\Scripts\python.exe "C:\Program Files\JetBrains\PyCharm Community Edition 2020.1.1\plugins\python-ce\helpers\pydev\pydevd.py" --multiproc --qt-support=auto --client 127.0.0.1 --port 59668 --file C:/Pro/selenium-debug/simple_test.py

我得到了这些异常(每次我打电话给ef_driver):

'WebDriver' object has no attribute '__len__'
'WebDriver' object has no attribute '__len__'

它不会停止脚本,它只会导致调试器变慢(它会更新驱动程序并将焦点设置为浏览器)。

知道为什么会触发和记录它吗?

奖励:使用 pdb 在控制台中运行调试是可以的,所以这看起来像严格的 PyCharm 调试 连接的东西

【问题讨论】:

您是否尝试过从末尾注释掉越来越多的代码并重新运行以查看错误在哪一行? 据此:***.com/questions/29533830/…获取页面标题需要使用driver.getTitle()方法 【参考方案1】:

看起来像 PyCharm 调试检查对象是否具有 __len__ 属性:

elif hasattr(v, "__len__")

而对象WebDriver 没有__len__

一个解决方案可能是(来自下面的链接)使用 try\catch 进行扭曲:

try:
    if is_numeric_container(type_qualifier, typeName, v):
        xml_shape = ' shape="%s"' % make_valid_xml_value(str(v.shape))
    elif hasattr(v, "__len__") and not is_string(v):
        try:
            xml_shape = ' shape="%s"' % make_valid_xml_value("%s" % str(len(v)))
        except:
            pass
except KeyError:
    pass

请检查此曲目: https://youtrack.jetbrains.com/issue/PY-39954

【讨论】:

以上是关于在 PyCharm 中调试时在 EventFiringWebDriver 中触发的异常的主要内容,如果未能解决你的问题,请参考以下文章

使用 bundle.js 时在浏览器中进行反应调试

非调试模式时在 Visual Studio 的输出窗口中显示消息?

非调试模式时在 Visual Studio 的输出窗口中显示消息?

pycharm 怎么在命令行中输入参数进行调试

pycharm怎么进行debug调试

TVM安装(二):pycharm远程调试