当 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):
...
我打算使用 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):
...