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
相关产品推荐
相关产品推荐

