You need to enable JavaScript to run this app. Selenium Webdriver(Python):send_keys操作的页面对象如何正确设置?
优惠活动
大模型
产品
解决方案
定价
更多

Selenium Webdriver(Python):send_keys操作的页面对象如何正确设置?

报错核心原因
  • 页面对象方法缺少返回值:当前getCountryName方法内执行了元素定位逻辑,但没有通过return把定位到的元素回传给调用方,方法默认返回None,对None调用send_keys就会触发你看到的属性错误。
  • 元素定位方法用错:你在页面对象里写的是find_elements(复数形式),该方法会返回匹配到的元素列表而非单个WebElement对象;哪怕加了return,列表本身也不具备send_keys方法,和你原生脚本里的单元素定位逻辑不匹配。
  • 测试用例缩进错误:confirmPage.getCountryName().send_keys("USA")没有缩进到test_endtoend2方法内部,不属于测试执行步骤。
修正后的代码实现

页面对象文件(Confirm_page.py)

from selenium.webdriver.common.by import By

class ConfirmPage:
    # 元素定位器定义
    typeCountry = (By.XPATH, "//input[@id='country']")

    def __init__(self, driver):
        self.driver = driver

    def getCountryName(self):
        # 改用单元素定位方法,增加return返回定位结果
        return self.driver.find_element(*ConfirmPage.typeCountry)

测试用例文件

from pageObjects.Confirm_page import ConfirmPage

class TestOne(BaseClass):
    def test_endtoend2(self):
        confirmPage = ConfirmPage(self.driver)
        # 操作语句缩进到测试方法作用域内
        confirmPage.getCountryName().send_keys("USA")
补充说明
  • 页面对象模式的封装逻辑要求:每个暴露给测试用例调用的元素获取方法,必须明确返回对应的WebElement对象,才能支持链式调用send_keys、click等元素操作。
  • 若业务场景确实需要批量定位元素(比如多个同结构的商品卡片),才需要使用复数形式的find_elements,此时需要从返回的列表中按索引取出目标元素后再执行操作。

内容的提问来源于stack exchange,提问作者Faiza_Minnelli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 18:54:03