我正在尝试找出如何关闭基本身份验证弹出窗口(而不用“https://username:pass@link.com”绕过它们)
无论如何,有没有办法关闭,或者只是用 Cypress 逃避基本的身份验证弹出窗口?基本身份验证弹出窗口在 cy.click 之后显示
describe("UC01 - Login validate dashboard", function () { before(() => { cy.visit(Cypress.env("host")); cy.xpath("/html/body/div/main/div[2]/div/button[1]") .click() .then(() => { console.log("test"); //Already tried: cy.on("window:confirm", () => false); cy.window().then(($win) => { cy.stub($win, "prompt").returns("This is a test text"); }); cy.on("window:alert", (str) => { expect(str).to.equal("I am a JS Alert"); }); }); //The issue happening is: after the cy.xpath click (that redirects to keycloak auth), only with chrome //and edge engine on Windows OS a basic auth popup shows up. //I've noticed that with Mac OS it does not happen.
在 Cypress 中,您可以使用 cy.on() 命令来监听某些事件并执行相应的操作。然而,基本身份验证弹出窗口是浏览器内置安全机制的一部分,Cypress 没有直接的方法来处理它们。
如果您在使用 Cypress 进行测试时遇到基本身份验证弹出窗口,通常是由需要身份验证的服务器响应引起的。要处理这种情况,您可以使用 auth 选项直接在 URL 中传递身份验证凭据。您可以这样做:
describe("UC01 - Login validate dashboard", function () { before(() => { // Pass the authentication credentials in the URL const username = "your_username"; const password = "your_password"; const baseUrl = Cypress.env("host"); const authUrl = `http://${username}:${password}@${baseUrl}`; cy.visit(authUrl); // Rest of your test code... }); // Rest of your test cases... });
通过在 URL 中提供凭据,您可以绕过基本身份验证弹出窗口。但是,请记住,此方法以纯文本形式公开凭据,这可能不适合生产环境。出于测试目的,它应该可以与 Cypress 一起正常工作。
如果您需要测试涉及处理基本身份验证弹出窗口本身的场景,您可以考虑使用其他工具,例如 Selenium WebDriver,它可以与浏览器的本机对话框交互。但在大多数情况下,通过上面所示的 URL 处理身份验证对于 Cypress 测试来说应该足够了。