Selenium Python中send_keys触发回车失效,输入数字问题求助
问题分析与解决方案
核心问题
你遇到的send_keys无法触发按键、反而输入数字的情况,是因为错误导入了curses库的KEY_ENTER常量。curses.KEY_ENTER是终端界面的按键编码,对应整数323,所以调用send_keys(KEY_ENTER)时实际是输入了数字323,而非触发回车键。
修复步骤
1. 替换按键常量导入
删除原代码中的:
from curses import KEY_ENTER
替换为Selenium官方提供的按键类:
from selenium.webdriver.common.keys import Keys
2. 修改回车触发代码
将:
search.send_keys(KEY_ENTER)
改为:
search.send_keys(Keys.ENTER) # 部分场景下用RETURN更可靠,可替换为: # search.send_keys(Keys.RETURN)
3. 修正其他潜在问题
- 代码中
driver.get("url")是硬编码字符串,应使用变量url:driver.get(url) - 断言部分的XPATH
//input[@placeholder='pytest.order']存在错误,pytest.order是变量而非占位符字符串,同时输入框的文本需用get_attribute("value")获取而非.text,修正后示例:sale_element = driver.find_element(By.CLASS_NAME, "o_searchview_input") assert sale_element.get_attribute("value") == pytest.order
完整修正后的代码片段
import pytest from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.firefox.service import Service from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.keys import Keys # 新增正确导入 class TestFunc: order ="" def test_validate_offer(self): username = "******" password = "*****" url = "http://*****" svc = Service("C:\\bin\\geckodriver.exe") driver = webdriver.Firefox(service=svc) pytest.order='3446' driver.implicitly_wait(15) driver.get(url) # 修正为变量url driver.find_element(By.ID,"login").send_keys(username) driver.find_element(By.ID,"password").send_keys(password) driver.find_element(By.XPATH,"//button[@type='submit']").click() driver.find_element(By.XPATH,"//div[@class='mk_apps_sidebar_panel']//li[2]//a[1]").click() driver.find_element(By.XPATH,"//i[@title='Remove']").click() driver.find_element(By.XPATH,"//input[@placeholder='Search...']").send_keys(pytest.order) wait = WebDriverWait(driver,10) search=wait.until(EC.visibility_of_element_located((By.CLASS_NAME, "o_searchview_input"))) search.send_keys(Keys.ENTER) # 修正为Keys.ENTER # 修正定位和文本获取方式 sale_element = driver.find_element(By.CLASS_NAME, "o_searchview_input") sleep(5) assert sale_element.get_attribute("value") == pytest.order driver.close()
内容的提问来源于stack exchange,提问作者GoSharad123
相关产品推荐
相关产品推荐

