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

如何使用Java+Selenium WebDriver向Swiggy网站搜索框传值

Swiggy网站自动化测试搜索框传值方案

对应页面元素参考截图:
Swiggy搜索框页面元素截图

之前定位、传值失败的核心原因

  • className定位天生不可靠:Swiggy前端类名是构建阶段生成的动态哈希值,版本迭代后就会变更,完全不适合作为定位依据,定位失败是必然结果
  • 直接定位后立刻执行输入会触发异常:Swiggy首页采用异步渲染逻辑,findElement 能拿到元素节点时,元素还没完成交互逻辑绑定,处于不可输入状态
  • 首屏加载的定位弹窗、优惠弹窗会生成遮罩层盖在搜索框上方,直接操作会命中遮罩而非输入框

正确实现逻辑

你之前写的基于placeholder的cssSelector定位逻辑是对的,只要补上显式等待、交互前校验的逻辑就能正常传值,步骤如下:

  • 初始化显式等待实例,设置合理的超时时间,不要写固定时长的sleep等待
  • 等待搜索框进入可点击状态后再获取元素实例,确保元素已经完成渲染、可交互
  • 输入内容前先清空输入框可能存在的默认值、历史缓存内容
  • 执行输入传值操作

参考代码

import org.openqa.selenium.WebElement;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.support.ui.ExpectedConditions;
import java.time.Duration;

// 初始化最长等待时长为10秒的显式等待
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
// 等待搜索框可交互后定位元素
WebElement searchBox = wait.until(
    ExpectedConditions.elementToBeClickable(
        By.cssSelector("input[placeholder='Search for restaurants and food']")
    )
);
// 清空输入框残留内容
searchBox.clear();
// 传入目标搜索值
searchBox.sendKeys("披萨");

备用定位方案

如果遇到站点区域化配置导致placeholder文案变动,可以用搜索容器层级定位的方式,表达式参考:

By searchBoxLocator = By.cssSelector("div[class*='SearchContainer'] input[type='text']");

调试提示:如果运行时提示找不到元素,先手动确认当前打开的Swiggy站点是否已经选择了对应配送城市,未选城市的首页搜索框属性会有差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:45:46