量角器-获取Cookie的价值

时间:2018-08-10 07:16:15

标签: protractor

我有一个cookie值,该值可以在每次加载页面时更改-我想捕获它。

it('test get a value back', function() {

    var sessionID;

    // add a delay in to cover waiting for page to render
    var EC = protractor.ExpectedConditions;
    var e  = element(by.css(constants.cookieAccept));
    browser.wait(EC.presenceOf(e),10000);

    // click the accept
    element(by.css(constants.cookieAccept)).click();

    var EC2 = protractor.ExpectedConditions;
    var e2  = element(by.xpath(constants.IYSDyesRadio));
    browser.wait(EC2.presenceOf(e2),10000);


    // this variable returns undefined
    browser.manage().getCookie('mycookie').then(function(cookie) {
        sessionID = cookie.value;
    });

    // this expectation fails (the value returened cookie.value is correct)
    browser.manage().getCookie('mycookie').then(function(cookie) {
        expect(cookie.value).toEqual("Yes");
    });

    console.log('Session id is ' + sessionID);

});  

上面是我的小测试代码。我正在尝试从“ mycookie” cookie中获取值,并将其分配给sessionID变量-但是在执行时未定义。我使用下一段代码,将值与字符串进行比较,以返回正确的cookie值。

我不太清楚自己在做什么错。我怀疑诺言有点愚蠢。

我现在已经注释掉其中一个cookie元素,只是在cookie值上使用console.log,并且正确值显示在控制台上。

2 个答案:

答案 0 :(得分:2)

注释不太可读。让我在这里详细说明问题。

browser.manage().getCookie('mycookie').then(function(cookie) {
    console.log(cookie.value) //print the value
    sessionID = cookie.value; //assign a value
});

如果要这样做:     console.log(sessionID)     它不会工作。

getCookie()返回一个承诺。因此,如果您想使用sessionID,则需要等待(使用另一个then())。

因此代码应如下所示:

browser.manage().getCookie('mycookie').then(function(cookie) {
    console.log(cookie.value) //print the value
    sessionID = cookie.value; //assign a value
}).then(() => {
    console.log(sessionID, ' it works!');
});

答案 1 :(得分:0)

应将expect行移到.then块内。如果您要从已解决的承诺中设置一个值,则不能保证在执行以下代码行之前就可以完成该设置。

我不确定我是否完全理解您的问题,但是以下代码应该可以工作:

browser.manage().getCookie('mycookie').then(function(cookie) {
    expect('the expected cookie value').toEqual(cookie.value);
});