首页 > 解决方案 > Webdriver.IO 处理单点登录 cookie

问题描述

我正在创建一些 node.js webdriverio 测试。当我连接到我的任何站点时,会检查是否存在 ssosession cookie(以及其他),以确认用户可以访问该页面。如果它不存在,浏览器会立即重定向到我们的登录页面。我需要从成功登录中捕获生成的 cookie,并使用它们来加载我想要测试的页面。

在 curl 中,我这样做:

curl -H"Content-type: application/json" --user-agent "MyTestAgent" --cookie-jar cookiefile -o - --data-ascii "{\"user_id\": \"username\", \"user_secret\": \"password\"}" -X POST https://loginpage.net

然后:

curl -H"Content-type: application/json" --user-agent "MyTestAgent" --cookie cookiefile - --cookie-jar cookiefile -o - https://testpage.net

目前在我的代码中,当我点击我打算测试的页面的 url 时,它会立即重定向到登录页面,我输入登录凭据并成功登录。然后我将 cookie 转储到控制台,它们没有更新。ssosession 的东西不存在(还没有?)。如果我单独 console.log ssosession,它是空的。如果我 console.log 所有的 cookie,它们就像我只是从登录页面抓取 cookie 而没有登录一样。没有任何 SSO 内容存在。

describe('testpage.net page', function () {
    it('should login', function () {
        browser.url('https://testpage.net');
        //this immediately redirects to https://loginpage.net
        browser.setValue('#userid','noone@nowhere.net');
        browser.setValue('#passwd','S3cr3tP4ssw0rd');
        browser.submitForm('#login');
        console.log(browser.getCookie('ssosession'));
        //returns null
        console.log(browser.getCookie());
        //returns cookies that existed prior to login success
    });
});

我需要一种方法来获取登录后成功 cookie,将它们存储在本地,相当于 curls cookiejar,并在后续测试中使用它们。我一直在用头撞墙,试图弄清楚这是怎么做到的。这是一个具有非常陈旧的身份验证方法的内部站点,但我需要为它的 gui 编写测试自动化。一旦克服了这个特殊的障碍,应该很容易做到这一点。建议非常感谢!

标签: javascriptnode.jscookiessingle-sign-onwebdriver-io

解决方案


推荐阅读