无法从赛普拉斯的 html 正文中提取 CSRF 令牌

Posted

技术标签:

【中文标题】无法从赛普拉斯的 html 正文中提取 CSRF 令牌【英文标题】:Unable to extract CSRF token from html body in Cypress 【发布时间】:2019-12-12 03:06:11 【问题描述】:

我无法从 Cypress 中的 html 解析 CSRF 令牌。 我正在关注这个链接:Logging in using CSRF Token in Cypress

尝试遵循上述链接中的 strategy #1,但我不断收到未定义的令牌。

这就是我的 html 的样子:

Return html looks like this

这就是我的代码的样子:

           cy.request(
                url: returnUrlFromLoginAPI,
                followRedirect: false
            )
            .its('body')
            .then((body) => 
                const $html = Cypress.$(body)
                const requestVerificationToken = $html.find("input[name=__RequestVerificationToken]").val()
                console.log(requestVerificationToken)
             )
        )

【问题讨论】:

$html.find 真的返回结果吗?我尝试了同样的方法来查询元标记,但没有成功。 它确实对我有用。我能够通过 $html.find 找到该元素。 【参考方案1】:

.find 查找当前元素集的后代,而我的元标记是该集合的一部分,而不是后代。这就是为什么你应该使用.filter,因为过滤器会寻找当前集合及其后代

【讨论】:

【参考方案2】:

不确定“正确”的方式是什么,但我这样做了:

cy.get('[name=__RequestVerificationToken]').then($rvt => 
   console.log($rvt.val());

【讨论】:

以上是关于无法从赛普拉斯的 html 正文中提取 CSRF 令牌的主要内容,如果未能解决你的问题,请参考以下文章

无法通过赛普拉斯加载我的 Azure 托管 Web 应用程序

赛普拉斯自定义命令无法识别

赛普拉斯/GitLab CI/CD 集成 - 赛普拉斯不会在无头模式下启动

无法使用赛普拉斯发送 POST 登录请求

如何使用赛普拉斯测试文件输入?

赛普拉斯:如何从自定义命令中获取返回值? (柏树承诺)