当 WebDriver 实例从 conftest.py 传递给测试 class 时无法访问 WebDriver class 的方法(Python + Selenium)

Unable to access methods of WebDriver class when the WebDriver instance is passed to test class from conftest.py (Python + Selenium)

我打算使用 Pytest 在 Python 中开发我的第一个 Selenium 框架。

由于我们不应该在所有测试class中重复设置和拆卸方法,因此建议我们将它们声明为conftest.py中的fixture(s)。

现在,我在 conftest.py 中有一个 fixture 方法(如屏幕截图所示)并将驱动程序对象引用传递给 TestDemo class(其他屏幕截图)。

我的问题是,当我们使用 driver. 时,我们会得到所有方法的建议,这非常用户友好。

但是当我尝试使用 self.driver. 在 TestDemo class 下访问相同内容时,这些方法不可见。

有趣的是,如果我手动编写方法,测试会按预期进行。

你能帮我解决我的代码中的任何错误或者这是预期的行为吗?

您可以为 TestDemo class 的 driver 属性添加类型提示:

from typing import ClassVar
from selenium.webdriver import Chrome


class TestDemo:
    driver: ClassVar[Chrome]

    def test_e2e(self, setup):
        ...

当然,这不会与像 mypy 这样的静态类型检查器兼容(如果您使用它来进行打字测试),因为 selenium 库本身没有类型,但应该只是足以让 IDE 获得代码建议。

编辑:

引入 ClassVar 类型提示适用于 Visual Studio Code 和 Wing IDE,但遗憾的是不适用于 PyCharm,因为它缺乏对 PEP 526 的完全支持,请参阅 PY-20811).要使用 PyCharm 完成代码,请使用实例属性的类型提示:

from typing import ClassVar
from selenium.webdriver import Chrome


class TestDemo:
    driver: Chrome

    def test_e2e(self, setup):
        ...