如何存储图像的 src 并将其与 Cypress 中的另一个图像进行比较?

J.L*_*ong 2 javascript e2e-testing cypress

测试目标是确认如果用户上传新图片,上传图片的 'src' 属性会发生变化,这意味着图片已更改。

我尝试使用几种方法,概述如下。

第一种方法

cy.get('.img').then($img => {
      //store the src

      const source = $('img').attr('src');

      /**
       * File drop 2mb jpg
       */
      cy.fixture(Cypress.env("JPG_2MB_ASSET"), "base64").then(fileContent => {
        cy.get(".dropzone").upload(
          {
            fileContent,
            fileName: "sampleimage.jpg",
            mimeType: "image/jpeg"
          },
          { subjectType: "drag-n-drop" }
        );
      });
      cy.wait(16000);

      cy.get('img')
        .attr('src')
        .should($src2 => {
          expect($src2).not.to.eq(source);
        });
Run Code Online (Sandbox Code Playgroud)

第二种方法

      //store the src

      const source = $img.attr('src')

      /**
       * File drop 2mb jpg
       */
      cy.fixture(Cypress.env("JPG_2MB"), "base64").then(fileContent => {
        cy.get(".dropzone").upload(
          {
            fileContent,
            fileName: "sampleimage.jpg",
            mimeType: "image/jpeg"
          },
          { subjectType: "drag-n-drop" }
        );
      });
      cy.wait(16000);

      cy.get("img").attr('src').should(($src2) => {
        expect($src2).not.to.eq(source)
Run Code Online (Sandbox Code Playgroud)

第三种方法

    cy.get("img")
      .attr("src")
      .then($src1 => {
        /**
         * File drop 2mb jpg
         */
        cy.fixture(Cypress.env("JPG_2MB"), "base64").then(fileContent => {
          cy.get(".dropzone").upload(
            {
              fileContent,
              fileName: "sampleimage.jpg",
              mimeType: "image/jpeg"
            },
            { subjectType: "drag-n-drop" }
          );
        });
        cy.wait(16000);

        cy.get('img')
          .attr('src')
          .should($src2 => {
            expect($src2).not.to.eq($src1);
          });
Run Code Online (Sandbox Code Playgroud)

上传效果很好,但 src 的比较没有。

第一种和第二种方法

预期 - 它将第一张图像的 src 存储为 const source,并丢弃 2mb jpg。然后将第二个图像的 src 与第一个图像的 src 进行比较并确认它们不同。

结果- ReferenceError: $ is not defined

第三种方法

预期 - 它将第一个 src 存储为$src1,然后将其与第二个 src 进行比较,$src2

结果- cy.get(...).attr is not a function

J.L*_*ong 6

在对我的键盘感到愤怒之后,我找到了成功的解决方案。

使用invoke您可以存储 attr 之类的值src,如下所示:https : //docs.cypress.io/api/commands/invoke.html#Arguments-are-automatically-forwarded-to-the-function

因此,在对上述尝试进行一些调整后,我发现它可以完美运行:

    cy.get('.image-root img').invoke('attr', 'src').then((firstSrc) => {
      const src1 = firstSrc

        /**
         * File drop 2mb jpg
         */
        cy.fixture(Cypress.env("JPG_2MB"), "base64").then(fileContent => {
          cy.get(".dropzone").upload(
            {
              fileContent,
              fileName: "sampleimage.jpg",
              mimeType: "image/jpeg"
            },
            { subjectType: "drag-n-drop" }
          );
        });

        cy.wait(16000);

      cy.get('.image-root img').invoke('attr', 'src').then((nextSrc) => {
        expect(nextSrc).to.not.equal(src1)
      });
    });
Run Code Online (Sandbox Code Playgroud)