Selenium JS测试Svelte项目时登录后无法获取授权Cookie如何解决
问题核心原因
你在点击授权按钮后立即执行了Cookie获取逻辑,此时后端授权请求还未返回,浏览器尚未写入授权Cookie,因此拿到的是空结果。
可行解决方案
1. 等待目标Cookie写入后再获取
使用Selenium内置的等待机制,轮询检查目标授权Cookie是否存在,确认写入后再执行后续操作,示例代码如下:
const { By, until } = require('selenium-webdriver'); const URL = "http://localhost:5000" describe('SVELTE CLIENT APP', function() { // 全局设置超时时间,避免等待超时报错 this.timeout(30000); var driver; before(async function () { driver = new webdriver.Builder() .forBrowser('chrome') .build(); }); after(async function() { await driver.quit(); }); describe('Navigation with Auth', async function () { it('Experiment', async function (){ await driver.get(URL); // 点击授权按钮 await driver.findElement(By.css('body > div > fieldset:nth-child(6) > div:nth-child(2) > span > button > span')).click(); // 等待AUTH_COOKIE写入,最多等待10秒 await driver.wait(async function() { const cookies = await driver.manage().getCookies(); return cookies.some(cookie => cookie.name === 'AUTH_COOKIE'); }, 10000, '授权Cookie未在规定时间内写入'); // 此时就能正常获取到授权Cookie const allCookies = await driver.manage().getCookies(); const authCookie = allCookies.find(cookie => cookie.name === 'AUTH_COOKIE'); console.log('授权Cookie:', authCookie); // 后续业务逻辑 //.... }); }); });
2. 等待授权完成的页面标识后再获取
如果授权完成后页面会跳转、或者出现专属的登录后元素,可以先等待该元素加载完成,再执行Cookie获取逻辑,更符合真实用户操作时序:
// 示例:等待授权完成后显示的「欢迎回来」元素出现 await driver.wait(until.elementLocated(By.id('welcome-text')), 10000); // 再获取Cookie const cookies = await driver.manage().getCookies();
其他排查点
- 确认你的授权Token确实是存储在Cookie中:如果后端返回的Token是存在localStorage/sessionStorage里,需要用
await driver.executeScript('return localStorage.getItem("AUTH_TOKEN")')的方式获取 - 确认Cookie的作用域和当前测试域名匹配:如果Cookie是写入在父域名下,需要先导航到对应域名下才能获取到对应Cookie
内容的提问来源于stack exchange,提问作者Niki_Lauda
相关产品推荐
相关产品推荐

