小能豆

有没有办法用 Cypress 关闭基本身份验证弹出窗口?

javascript

我正在尝试找出如何关闭基本身份验证弹出窗口(而不用“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.

阅读 146

收藏
2023-08-03

共1个答案

小能豆

在 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 测试来说应该足够了。

2023-08-03