Python unittest+Selenium报错:MainPage无click_go_button属性
以下是几种可能的原因及对应的排查/解决方法:
1. 导入的MainPage类并非你定义的版本
测试代码中使用page.MainPage导入类,可能存在以下问题:
- 修改了MainPage类的代码但未保存,或运行测试时加载的是旧版本的
page模块(Python会缓存已导入的模块)。 - 项目路径中存在另一个同名的
page.py文件,导致导入了错误的类。
解决步骤:
- 确认
page模块所在的文件已保存最新代码,删除项目根目录下的__pycache__文件夹后重新运行测试。 - 在测试代码的
test_test_also方法开头添加一行代码:
运行测试后查看输出,确认列表中是否包含print(dir(mainPage))click_go_button。如果没有,说明导入的类确实没有这个方法,需要检查导入路径和文件内容。
2. BasePage类干扰了属性访问
MainPage继承自BasePage,如果BasePage中重写了__getattr__、__setattr__等魔法方法,可能会导致实例无法正常访问自身的方法。
解决步骤:
- 检查BasePage的代码,确认没有实现会干扰属性查找的魔法方法。如果必须使用这些方法,需要确保它们正确处理了方法的访问(比如在
__getattr__中找不到属性时抛出AttributeError,而非返回None或其他值)。
3. MainPage类的定义存在隐性问题
虽然代码看起来正确,但可能存在以下隐性问题:
- MainPage类的定义被其他代码覆盖(比如在同一个模块中,后面又定义了一个同名的MainPage类)。
- 代码缩进错误:检查
click_go_button方法的缩进是否和if_title_matches方法同级,确保它是MainPage类的成员方法,而非嵌套在其他方法或类中。
解决步骤:
- 打开
page模块文件,确认MainPage类的定义中,click_go_button方法的缩进正确,且没有被其他同名类覆盖。
额外提示:测试代码中的另一个潜在问题
测试代码中assert mainPage.if_title_matches这一行存在问题:if_title_matches是一个方法,需要调用它才能得到布尔值,应该改为:
assert mainPage.if_title_matches()
内容的提问来源于stack exchange,提问作者Mr MuscleMan
相关产品推荐
相关产品推荐

