WebdriverIO自动化脚本随机出现登录400 Bad Request错误求助
结合你用WebdriverIO复用浏览器实例、多次登录退出的测试场景,以下是几个可能的原因及排查点:
CSRF Token 过期或未更新
多次登录退出后,页面残留的旧CSRF token可能未被刷新,导致提交的请求携带无效凭证。检查通用登录方法,确保每次登录前都重新抓取页面中最新的CSRF token值(比如从隐藏输入框获取),而非复用之前缓存的内容。浏览器会话残留数据冲突
复用浏览器实例时,Cookie、LocalStorage等存储的旧会话数据可能和新登录请求冲突。每次logout后,执行browser.deleteAllCookies()和browser.execute('window.localStorage.clear();'),彻底清理会话残留,保证下一次登录是干净状态。元素未就绪就触发点击
如果登录按钮或表单元素还未完全渲染、绑定事件就被点击,可能发送不完整的请求。优化登录逻辑:用waitForClickable()、waitForDisplayed()等显式等待确保元素就绪后再执行点击,避免因操作过快导致的请求异常。服务器请求频率限制
自动化测试的请求频率远高于手动操作,服务器可能将连续登录请求判定为异常流量,返回400。尝试在每次登录前添加1-2秒的随机延迟模拟真实用户节奏,或和后端确认登录接口是否有限流策略。请求头/请求体异常
多次会话切换后,浏览器自动携带的请求头(如Referer)可能出现异常,或请求体参数缺失。启用WebdriverIO的网络日志(browser.enableNetworkLogs())捕获登录请求的完整信息,和手动登录的请求对比,找出参数或头信息的差异。
内容的提问来源于stack exchange,提问作者Neerajkumar

