使用Selenium页面对象模型时遇TypeError:send_text缺少text参数
问题分析与解决:Selenium POM中send_text方法参数错误
错误原因
问题出在BasePage类的send_text方法参数定义上:
def send_text(self, *locator, text):
*locator是可变位置参数,会捕获所有传入的位置参数;而它后面的text被定义为关键字-only参数——调用该方法时必须通过text=xxx的形式传递,不能直接用位置参数。
你在LandingPage中的调用方式:
self.send_text(self.USERNAME_EMAIL_FIELD, username)
这里self.USERNAME_EMAIL_FIELD(元组)和username都会被*locator接收,导致text参数完全未传入,因此触发missing required keyword-only argument错误。
解决方案
方案1:调用时使用关键字传参
修改LandingPage的enter_user_name方法,将username通过关键字text传递:
class LandingPage(BasePage): USERNAME_EMAIL_FIELD = (By.ID, 'inputEmail') def __init__(self, driver): super().__init__(driver) def enter_user_name(self, username): self.send_text(self.USERNAME_EMAIL_FIELD, text=username)
方案2:调整send_text方法的参数顺序
如果不想每次都用关键字传参,可将text参数移到*locator前面,改为位置参数传递:
首先修改BasePage的send_text方法:
class BasePage(object): def __init__(self, driver): self.driver = driver def find_element(self, *locator): return self.driver.find_element(*locator) def send_text(self, text, *locator): element = self.find_element(*locator) element.send_keys(text)
然后对应调整LandingPage中的调用顺序:
def enter_user_name(self, username): self.send_text(username, self.USERNAME_EMAIL_FIELD)
额外注意
你的BaseTest中调用的是login_user方法,但LandingPage里仅定义了enter_user_name,这是明显的笔误,需要确保方法名一致才能正常执行。
内容的提问来源于stack exchange,提问作者qatesterbecomingprogrammer
相关产品推荐
相关产品推荐

