我有一个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,并且正确值显示在控制台上。
答案 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);
});