selenium获取元素 出现的错误AttributeError: ‘TestPage‘ object has no attribute ‘driver‘

目录

错误收集

错误分析

解决办法

运行结果


错误收集

D:\Program\Util\python.exe "D:/Program/myUtil/PyCharm 2024.3.5/plugins/python-ce/helpers/pycharm/_jb_pytest_runner.py" --target testfeishu.py::TestPage 
Testing started at 8:04 ...
Launching pytest with arguments testfeishu.py::TestPage --no-header --no-summary -q in C:\Users\Administrator\PycharmProjects\PoPage

============================= test session starts =============================
collecting ... collected 1 item

testfeishu.py::TestPage::test_login_001 

============================== 1 failed in 0.37s ==============================
FAILED                           [100%]你好啊

testfeishu.py:23 (TestPage.test_login_001)
self = <testfeishu.TestPage object at 0x000001D93AB3E710>

    def test_login_001(self):
        print("你好啊")
        # 获取元素 ==》通过id定位
>       login_button = self.driver.find_element(by=By.CSS_SELECTOR, value="div > a[class='button-login']")
                       ^^^^^^^^^^^
E       AttributeError: 'TestPage' object has no attribute 'driver'

testfeishu.py:27: AttributeError

Process finished with exit code 1
 

错误分析

查看代码,发现我们写的前置处理函数是setup , 但是这个是当前最新版本的selenium 这个方法已经被修改为setup_method,teardown也已经被修改为teardown_method

def setup(self):
    self.driver = webdriver.Chrome()

解决办法

修改前置处理器的方法

def setup_class(self)

class TestPage:

    def setup_method(self):
        self.driver = webdriver.Chrome()

运行结果

可以看到报错已经解决了

运行结果收集

D:\Program\Util\python.exe "D:/Program/myUtil/PyCharm 2024.3.5/plugins/python-ce/helpers/pycharm/_jb_pytest_runner.py" --target testfeishu.py::TestPage.test_login_001 
Testing started at 8:15 ...
Launching pytest with arguments testfeishu.py::TestPage::test_login_001 --no-header --no-summary -q in C:\Users\Administrator\PycharmProjects\PoPage

============================= test session starts =============================
collecting ... collected 1 item

testfeishu.py::TestPage::test_login_001 

============================== 1 passed in 6.85s ==============================
PASSED                           [100%]你好啊
已经获取了驱动

Process finished with exit code 0

### 解决 `pytest` Web 自动化测试中的 `AttributeError` 当遇到类似于 `'TestLogin' object has no attribute 'login'` 的错误时,通常是因为类方法或属性未被正确定义或初始化。对于给定的情况,在定义测试类及其方法时需要注意几个方面。 #### 正确设置测试环境 为了确保所有必要的对象和资源在测试开始前已准备好,应该使用 `setup_method()` 或者更推荐的 `@classmethod setup_class(cls)` 来完成一次性准备工作[^1]: ```python import pytest from selenium import webdriver from pages.login_page import LoginPage # 假设这是自定义页面对象模型的一部分 class TestLogin: @classmethod def setup_class(cls): cls.driver = webdriver.Chrome() cls.login_page = LoginPage(cls.driver) def test_login(self): self.login_page.enter_username("testuser") self.login_page.enter_password("testpassword") self.login_page.click_login() assert "Dashboard" in self.driver.title @classmethod def teardown_class(cls): cls.driver.quit() ``` 上述代码展示了如何通过 `setup_class` 和 `teardown_class` 方法来管理 WebDriver 实例的生命期以及页面对象实例化的最佳实践[^2]。 #### 防止命名冲突 另一个潜在问题是名称的选择可能导致混淆。如果确实存在名为 `login` 的函数或变量,则应避免将其作为其他成员的名字。例如,上面的例子中并没有直接命名为 `self.login` 而是选择了更具描述性的名字如 `enter_username`, `click_login` 等等。 #### 测试用例文件结构 确保测试脚本遵循 Python 文件模块的标准约定,并且导入路径正确无误。这有助于防止由于模块解析失败而引起的类似错误消息。 #### 关键点总结 - 使用合适的生命周期钩子 (`setup_class`, `teardown_class`) 初始化共享资源。 - 清晰地区分不同功能的方法名以减少歧义。 - 检查并修正任何可能引起误解的对象引用关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值