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

JMeter+Selenium提取LocalStorage用户ID时WebDriverWait报错求助

解决JMeter WebDriver Sampler中WebDriverWait参数错误并提取LocalStorage用户ID

错误原因分析

你遇到的TypeError是因为WebDriverWait的构造方法参数不匹配。Selenium 4.x版本后,WebDriverWait的标准构造方法要求传入WebDriver实例和Duration类型的等待时长,旧版本直接传long类型秒数的构造方法已被废弃。如果脚本里用了旧写法、参数类型错误(比如传字符串)或参数顺序颠倒,就会触发这个报错。

正确实现代码示例

以下是可直接使用的Groovy脚本,包含正确的WebDriverWait用法和LocalStorage用户ID提取逻辑:

// 导入必要的类
import org.openqa.selenium.support.ui.WebDriverWait
import org.openqa.selenium.support.ui.ExpectedConditions
import java.time.Duration

try {
    // 初始化WebDriverWait,设置10秒等待时长
    def wait = new WebDriverWait(WDS.browser, Duration.ofSeconds(10))
    
    // 等待LocalStorage中目标键(示例为"userId")存在且不为空
    wait.until(ExpectedConditions.javaScriptReturnsValue(
        "return window.localStorage.getItem('userId') !== null && window.localStorage.getItem('userId') !== '';"
    ))
    
    // 执行JavaScript提取LocalStorage中的用户ID
    def userId = WDS.browser.executeScript("return window.localStorage.getItem('userId');")
    
    // 将提取到的用户ID存入JMeter变量,供后续组件使用
    WDS.vars.put("extractedUserId", userId)
    
    WDS.log.info("成功提取用户ID: " + userId)
} catch (Exception e) {
    WDS.log.error("等待或提取LocalStorage失败: " + e.getMessage())
    throw e // 抛出异常让JMeter标记采样器失败
}

关键说明

  1. WebDriverWait构造:必须传入WDS.browser(JMeter提供的当前浏览器实例)和Duration.ofSeconds(10)(明确的时长对象),避免使用已废弃的new WebDriverWait(WDS.browser, 10)写法。
  2. 等待条件:用javaScriptReturnsValue执行JS检查LocalStorage的目标键状态,确保值已被写入后再提取,避免因页面加载时序问题导致提取空值。
  3. LocalStorage访问:Selenium本身没有直接操作LocalStorage的API,必须通过executeScript调用浏览器JS来读取。
  4. 变量存储:用WDS.vars.put将结果存入JMeter变量,后续可通过${extractedUserId}引用。

常见错误排查

  • 若仍报参数不匹配:检查是否导入了java.time.Duration类,或是否误将时长传为字符串(比如"10"),必须传入Duration对象。
  • 若提取到空值:确认目标键名是否正确(区分大小写),或调整等待时长,确保页面有足够时间将值写入LocalStorage。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 22:59:59