Python Selenium TypeError: 缺少必需位置参数'self',求助解决
问题:Python Selenium 报错 TypeError: missing required positional argument: 'self'
运行UI自动化测试代码时持续报错:TypeError: practicepagebutton() missing 1 required positional argument: 'self',报错行位于Test_e2e文件中调用HomePage.practicepagebutton()处,后续调用PracticePage.testLoginPage()也存在同类问题。
错误原因
practicepagebutton()和testLoginPage()都是实例方法,这类方法必须通过类的实例对象调用,而非直接通过类名调用。实例方法的第一个参数self会自动传入当前实例对象,直接用类名调用时没有传入该参数,因此触发报错。
修复步骤
1. 修正Test_e2e.py中的方法调用
你已经创建了HomePage的实例homepage,需要通过该实例调用practicepagebutton();同理,获取PracticePage实例后,也要通过实例调用testLoginPage()。
修改后的Test_e2e.py代码:
from pageObjects.HomePage import HomePage from pageObjects.LoginPage import LoginPage from pageObjects.PracticePage import PracticePage from utilities.BaseClass import BaseClass from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import pytest import time class TestAutomation(BaseClass): def test_e2e(self): homepage = HomePage(self.driver) # 用实例homepage调用方法,而非类HomePage practicePage = homepage.practicepagebutton() practicePage.getPageTitle() # 用实例practicePage调用方法,而非类PracticePage loginpage = practicePage.testLoginPage() loginpage.loginUsername().send_keys("student") loginpage.loginPassword().send_keys("Password123") loginpage.loginSubmit().click()
2. 修正PracticePage.py中的getPageTitle方法
原代码中试图通过元素调用title()是错误的,页面标题是浏览器驱动的属性,直接用self.driver.title即可:
修改后的PracticePage.py代码:
from selenium.webdriver.common.by import By from pageObjects.LoginPage import LoginPage class PracticePage: def __init__(self, driver): self.driver = driver testLoginPageButton = (By.XPATH, "//*[text()='Test Login Page']") def getPageTitle(self): # 直接返回页面标题,而非元素的title方法 return self.driver.title def testLoginPage(self): self.driver.find_element(*PracticePage.testLoginPageButton).click() loginpage = LoginPage(self.driver) return loginpage
3. 补充LoginPage.py的缺失代码
原LoginPage.py只有导入语句,缺少元素定位和对应的方法,需要补充:
修改后的LoginPage.py代码:
from selenium.webdriver.common.by import By class LoginPage: def __init__(self, driver): self.driver = driver # 定义登录元素定位(根据实际页面元素调整) username_loc = (By.ID, "username") password_loc = (By.ID, "password") submit_loc = (By.XPATH, "//button[@type='submit']") def loginUsername(self): return self.driver.find_element(*LoginPage.username_loc) def loginPassword(self): return self.driver.find_element(*LoginPage.password_loc) def loginSubmit(self): return self.driver.find_element(*LoginPage.submit_loc)
验证修复
完成以上修改后,重新运行测试代码,TypeError报错会消失,后续的登录操作也能正常执行(注意根据实际页面元素调整LoginPage中的定位表达式)。
内容的提问来源于stack exchange,提问作者Sid
相关产品推荐
相关产品推荐

