Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure active directory 在e2e测试中使用cypress:chrome进行身份验证时出错-error://chromewebdata_Azure Active Directory_Powerbi_Cypress_Adal_Powerbi Custom Visuals - Fatal编程技术网

Azure active directory 在e2e测试中使用cypress:chrome进行身份验证时出错-error://chromewebdata

Azure active directory 在e2e测试中使用cypress:chrome进行身份验证时出错-error://chromewebdata,azure-active-directory,powerbi,cypress,adal,powerbi-custom-visuals,Azure Active Directory,Powerbi,Cypress,Adal,Powerbi Custom Visuals,我使用cypress为我的UI编写E2E测试(请注意,这是一个PowerBI报告,因此是一种特例)。当我使用公共报告进行测试时,它运行良好。但当它是私人PBI报告时,我在登录部分遇到问题。经过一些研究,我发现这种方法对基于Azure AD的auth很有希望,并在commands.js文件中添加了此登录功能: Cypress.Commands.add('login', () => { cy.request({ method: 'POST', url:

我使用cypress为我的UI编写E2E测试(请注意,这是一个PowerBI报告,因此是一种特例)。当我使用公共报告进行测试时,它运行良好。但当它是私人PBI报告时,我在登录部分遇到问题。经过一些研究,我发现这种方法对基于Azure AD的auth很有希望,并在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报告之前都调用了login,但它仍然会重定向到url,并使用不同的客户端id作为查询参数,并且由于powerbi报告和重定向url的超域不同,因此它提供了
chrome-error://chromewebdata
错误(我想这就是原因)。因此,我想知道如何在azure ad auth支持的cypress测试中登录网站

此外,可能与此无关,但在控制台中又看到一个错误:

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(有关身份验证错误的更多详细信息):在使用客户端凭据生成toke时,我正在获取令牌,并看到它存储在会话存储中,但是cypress测试没有选择相同的令牌来授权访问PowerBI报告。因此,基本上,即使存在cookie来验证请求,对PowerBI访问的请求仍然重定向到login.microsoftonline.com/common/oauth2/authorize?client_id={与我在上述POST调用中使用的客户端id不同}

然而,在使用用户名/密码时,出现以下错误:“错误”:“需要交互”,“错误描述”:“AADSTS50079:由于管理员更改了配置,或者由于您移动到了新位置,您必须注册多因素身份验证才能访问 “错误代码”:[50079]

此时(20年4月17日),这可能与Cypress团队的未决问题有关:

特别是对我来说,我以前在4.3.0版本中有一个超级域存在此错误,但现在在4.4.0版本中,我得到了更多具有相同问题的域


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

谢谢@ebanster的建议。现在我切换到Edge后没有收到chrome webdata错误。但是当我访问主URL时,它会重定向到登录验证URL,并给出超时错误。你知道它为什么不提取会话存储凭据(在cy.login()步骤中设置)吗验证请求?另外,当我检查cookie“cypress会话cookie”时,它是空的。请在命令工作之前查看是否包含此内容:
cy.clearCookies({domain:null})
访问测试URL时出错:加载资源失败:服务器响应状态为431(请求头字段太大)你能尝试清除Cypress应用程序数据吗?