如何在Selenium中实现搜索输入、按下向下箭头后敲击回车操作
Selenium地址搜索按键操作问题排查方案
已发现的问题点
- ChromeDriver初始化配置错误
现有配置System.setProperty("Webdriver.chrome.drive", "C\\chromedrivers.exe");存在两处错误:- 系统属性名拼写错误,正确属性名为
webdriver.chrome.driver,当前拼写末尾缺失字母r,首字母多余大写 - 本地驱动路径拼写错误,C盘标识后缺失冒号,正确路径应为
C:\\chromedrivers.exe
- 系统属性名拼写错误,正确属性名为
- 按键逻辑不符合需求
现有代码仅在输入地址后拼接了回车操作,未加入要求的向下箭头按键指令 - 缺失加载等待逻辑
地址输入完成后,联想下拉框需要渲染时间,无等待直接触发按键会导致操作在下拉框加载完成前执行,无法生效 - 元素定位方式不稳定
所使用的绝对路径XPath高度依赖页面DOM层级结构,页面结构稍有变动就会出现定位失败问题
修正后可运行代码
import org.openqa.selenium.By; import org.openqa.selenium.Keys; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; import java.time.Duration; public class LocationSearchTest { public static void main(String[] args) { // 修正驱动配置 System.setProperty("webdriver.chrome.driver", "C:\\chromedrivers.exe"); ChromeDriver driver = new ChromeDriver(); // 配置全局隐式等待 driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10)); driver.manage().window().maximize(); driver.get("https://freshii.tacitdev.ca/"); driver.findElement(By.xpath("//span[contains(text(),'Locations')]")).click(); driver.navigate().to("https://freshii.tacitdev.ca/ca/lang/en/locations/delivery"); WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); // 替换为更稳定的相对定位,等待输入框可操作 var addressInput = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//autocomplete-manual//input"))); // 激活输入框 addressInput.click(); // 输入目标地址 addressInput.sendKeys("175 Hilda Avenue, North York, ON, Canada"); // 等待联想下拉选项加载完成 wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//autocomplete-manual//li"))); // 按向下箭头选中第一个联想结果,再按回车确认 addressInput.sendKeys(Keys.ARROW_DOWN); addressInput.sendKeys(Keys.ENTER); } }
额外排查点
如果运行后仍无法生效,可优先检查两点:
- 本地ChromeDriver版本与当前安装的Chrome浏览器主版本是否一致
- 操作执行时系统输入法是否为英文模式,中文输入法会导致特殊按键指令失效
内容的提问来源于stack exchange,提问作者Irene
相关产品推荐
相关产品推荐

