如何拖放 Cypress.io

How to drag and drop in Cypress.io

我正在测试 Trello 并尝试拖动最后一个列表,然后将其放入倒数第二列,但如果没有“.wait”,测试将无法运行。如果有人可以在这里就潜在问题提出建议,那将非常有帮助,因为我更愿意避免使用“.wait”。没有抛出错误,但如果没有“.wait”,拖放仍然不会发生。

describe("Moving list", () => {
  it("Waiting For Accept list should be moved from last column to the penultimate column", () => {
    cy.get("#board")
      .children(".js-list")
      .should("have.length", 4)
      .and("be.visible");

    cy.get(":nth-child(4) > .list")
      .should("be.visible")
      .and("contain", "Waiting For Accept")

    cy.get(":nth-child(4) > .list").trigger("mousedown", {
      which: 1
    });

    cy.get("#board > div:nth-child(2) > .list")
      .trigger("mousemove");

    cy.get("#board > div:nth-child(3) > .list")
      .trigger("mousemove")
      .trigger("mouseup");

    cy.get(":nth-child(3) > .list")
      .should("contain", "Waiting For Accept");
  });
});

See image

See image

开箱即用,记录的问题是 https://github.com/cypress-io/cypress/issues/845。但是在同一张票中,也可以使用本机拖放 API 和可拖动元素上的可拖动属性来解决此问题:

创建自定义命令

Cypress.Commands.add("dragTo", { prevSubject: "element" }, (subject, targetEl) => {
    cy.wrap(subject).trigger("dragstart");
    cy.get(targetEl).trigger("drop");
  }
);

在测试脚本中你可以使用:

cy.get(".source").dragTo(".target");

最后我使用 "cy.request"

解决了这个问题

https://docs.cypress.io/api/commands/request.html#Syntax

describe("Moving list", () => {
        it("Waiting For Accept list should be moved from last column to the penultimate column", () => {
            cy.request("https://trello.com/b/9lfzKIRu/trello-tests").then(response => {
                expect(response.status).to.eq(200);
            });
            cy.get("#board > div:nth-child(4) > .list").trigger("mousedown", {
                which: 1
            });
            cy.get("#board > div:nth-child(2) > .list").trigger("mousemove");
            cy.get("#board > div:nth-child(3) > .list")
                .trigger("mousemove")
                .trigger("mouseup");
            cy.get(":nth-child(3) > .list").should("contain", "Waiting For Accept");
        });
    });

您可以使用 Cypress 拖放插件

https://github.com/4teamwork/cypress-drag-drop

最好的解决方案是使用 https://github.com/4teamwork/cypress-drag-drop 它也支持拖动到顶部和底部。

        cy.get('#placeholder-3').drag('#placeholder-2', {            position: 'top', })

我通过将拖放版本从 2.1.0 降级到 1.8.0 解决了这个问题

https://www.npmjs.com/package/@4tw/cypress-drag-drop