使用Selenium+unittest编写测试用例时遭遇AttributeError问题求助
问题解决方法
第一个错误的原因与修复
你遇到的AttributeError: 'PythonOrgSearch' object has no attribute 'driver',核心原因是unittest框架要求初始化方法必须命名为setUp(大写U),而你写的是小写的setup。unittest只会自动调用符合命名规范的setUp方法,你的setup根本没被执行,self.driver自然没有被初始化,所以tearDown里调用self.driver.close()会报错。
第二个错误的原因
你试图通过重写__init__方法来修复问题,这是错误的做法。unittest.TestCase的构造函数会处理测试方法的元数据(比如_testMethodName),你重写__init__后没有调用父类的构造函数,破坏了框架的内部流程,导致抛出AttributeError: 'PythonOrgSearch' object has no attribute '_testMethodName'。
正确的代码实现
修正setUp的拼写,移除自定义的__init__方法,同时注意ChromeDriver路径的转义问题(用原始字符串或双反斜杠),另外你的路径里chromdriver.exe少了一个e,应该是chromedriver.exe:
import unittest from selenium import webdriver class PythonOrgSearch(unittest.TestCase): def setUp(self): # 使用原始字符串避免转义问题,同时修正驱动文件名 self.driver = webdriver.Chrome(r"C:\Program Files (x86)\chromedriver.exe") self.driver.get("http://www.python.org") def test_example(self): print("test") assert True def not_a_test(self): print('this wont print') def tearDown(self): self.driver.close() if __name__ == "__main__": unittest.main()
额外注意事项
- 只有以
test_开头的方法才会被unittest识别为测试方法,所以not_a_test不会被执行,这是正常现象。 - 如果ChromeDriver的路径配置有问题,可能会抛出找不到驱动的错误,确保你的ChromeDriver版本和Chrome浏览器版本匹配。
内容的提问来源于stack exchange,提问作者Jorge
相关产品推荐
相关产品推荐

