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

时间:2020-08-01 10:02:56

标签: python selenium frameworks pytest

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

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

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

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

但是当我尝试使用self.driver.在TestDemo类下访问同一对象时,这些方法不可见。

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

请帮助我解决我的代码中的任何错误或这是预期的行为吗? enter image description here enter image description here

1 个答案:

答案 0 :(得分:1)

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

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):
        ...