You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 15:22:34