使用Selenium页面对象模型时,调用super().__init__出现参数错误求助
问题解决
错误原因分析
- 父类初始化调用错误:
LoginPage的__init__方法中,调用super().__init__(self, driver)时多传入了self参数。Python里用super()调用父类构造方法时,不需要手动传self,super()会自动绑定当前实例对象。 - BasePage中open方法调用错误:
BasePage的__init__里直接写open()会调用全局的open函数,而非类的open方法,应该改为self.open()。
修正后的代码
BasePage类
class BasePage: page_url = "placeholder" def __init__(self, driver): self.driver = driver self.open() # 调用当前实例的open方法 def open(self): self.driver.get(self.page_url)
LoginPage类
class LoginPage(BasePage): page_url = os.getenv("LOGIN_URL") def __init__(self, driver): super().__init__(driver) # 仅传递driver参数即可 self.login_button = self.driver.find_element(*LoginPageLocators.LOGIN_BUTTON)
额外优化建议
在初始化方法里直接定位元素容易遇到页面未加载完成的问题,推荐用Selenium的显式等待确保元素可被定位,示例如下:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC class LoginPage(BasePage): page_url = os.getenv("LOGIN_URL") def __init__(self, driver): super().__init__(driver) self.login_button = WebDriverWait(self.driver, 10).until( EC.presence_of_element_located(LoginPageLocators.LOGIN_BUTTON) )
内容的提问来源于stack exchange,提问作者ReGuardian
相关产品推荐
相关产品推荐

