使用cypr:chrome的e2e测试中的身份验证错误-error://chromewebdata.



我正在使用柏树为我的UI编写E2E测试(请注意,这是一个PowerBI报告,因此它是一种特殊情况(。当我使用公开报告进行测试时,它运行良好。但当它是私人PBI报告时,我在登录部分遇到了问题。经过一些研究,我发现这种方法对基于Azure AD的身份验证很有前景,并在我的commands.js文件中添加了这个登录功能:

Cypress.Commands.add('login', () => { 
cy.request({
method: 'POST',
url: 'https://login.microsoftonline.com/{TENANT}/oauth2/token',
form: true,
body: {
grant_type: 'client_credentials',
client_id: CLIENT_ID,
client_secret: CLIENT_SECRET,
// resource: RESOURCE
},
header: {
'Content-Type': 'multipart/form-data'
}
}).then((responseData) => {
if (responseData.status === 200) {
window.sessionStorage.setItem("adal.idtoken", responseData.body.access_token);
window.sessionStorage.setItem("adal.token.keys", CLIENT_ID + "|")
window.sessionStorage.setItem(`adal.expiration.key${CLIENT_ID}`, responseData.body.expires_on)
window.sessionStorage.setItem(`adal.access.token.key${CLIENT_ID}`, responseData.body.access_token)
} else {
console.log("error retrieving token")
}
})
})

请注意,客户端ID和机密是正确的,并且具有访问powerbi报告的权限。我还测试了生成的令牌和sessionStorage变量,所有这些变量似乎都被正确分配了。现在,在我的测试中:

describe("E2E Tests", () => {
beforeEach(() => {
cy.login();
})
it("Sample Test 1", () => {
cy.visit("https://powerbi-report-url.com");
//...
});
})

我在cypress测试运行程序中看到,即使在访问powerbi报告时,之前已经调用了登录名Each,但它仍然重定向到https://login.microsoftonline.com具有不同客户端id作为查询参数的url,并且由于powerbi报表的超域和重定向的url不同,因此它会出现chrome-error://chromewebdata错误(我想这就是原因(。因此,想知道如何登录到由azure ad auth支持的Cyprus测试中的网站。

此外,可能不相关,但在控制台中看到另一个错误:

Refused to display 'https://powerbi-report-url.com' in a frame because it set 'X-Frame-Options' to 'deny'.

编辑1:切换到Edge不会产生chrome webdata错误,但访问URL的cy.visit仍然超时,并产生HTTP 431错误(请求标头太长(,无法进行身份验证。

编辑2(有关身份验证错误的更多详细信息(:在使用客户端凭据生成令牌时,我正在获取令牌,并看到它存储在会话存储中,但是柏树测试没有选择相同的令牌来授权访问PowerBI报告。所以,基本上即使认为存在cookie来验证请求,Power BI访问的请求仍然重定向到login.microsoftonline.com/common/oauth2/authorize?client_id={与我在上述POST调用中使用的客户端id不同的客户端id}

鉴于,在使用用户名/密码时;获得此错误:"error":"interaction_required","errordescription":"AADSTS50079:由于管理员更改了配置,或者由于您移动到了新位置,您必须注册多因素身份验证才能访问"error_codes":[50079]

此时(20年4月17日(,这可能与Cypress团队的Open问题有关:https://github.com/cypress-io/cypress/issues/4220

特别是对我来说,在以前的4.3.0版本中,我曾经有一个超级域出现过这个错误,但现在有了4.4.0版本,我有更多的域出现了同样的问题。

当前的解决方法:回滚到以前的版本并通过Edge运行(无论如何,它都是基于Chromium的(。

相关内容

最新更新