【问题标题】:Catch URL after click with Cypress (window.location changes)使用 Cypress 单击后捕获 URL(window.location 更改)
【发布时间】:2019-02-01 15:41:10
【问题描述】:

我想知道如何在<a> 链接上的点击事件后捕获和读取 URL。

在 onClick 事件中,我们的 javascript 对点击链接的实际 href 进行了一些字符串操作,然后即时完成了 window.location.href = myNewReplacebleURL。原来的href不一定是你点击后到达的位置。

我是这样开始的:

describe("Twitter", function() {

  it("Should assert that via value is set correctly in JS", function() {

    cy.server();
    cy.visit(Cypress.config("appUrl") + "/probes/sha/sha-via.html");
    cy.get("#v_test ul.share li a")
      .click();

  });

});

编辑:我想要的是捕获位于“页面加载”步骤的 URL。

【问题讨论】:

  • 您是否设法以某种方式解决了这个问题?
  • 不,我想知道这是否可能

标签: testing e2e-testing cypress


【解决方案1】:

您应该能够在 url:changed 事件回调中使用cy.on 来执行您的assertions

cy.on("url:changed", (newUrl) => {
  expect(newUrl).to.contain("?magic=true")
})

【讨论】:

  • 我不得不使用这种方法来捕获查询参数的变化,但我不明白。通常,赛普拉斯的理念是重试直到您的断言工作,所以 cy.url().should("match", "?foo=bar") 应该等待 url 匹配“foo=bar”。不是这样的,我必须听你描述的url:changed才能让它工作。
【解决方案2】:

您可以使用cy.location()命令,例如:

cy.get("#v_test ul.share li a")
      .click();
cy.location('href').should('eq', 'newUrl');

另外,作为cy.location('href') 命令的别名,您可以使用cy.url()

【讨论】:

  • 谢谢,但正如您在我更新的图像中看到的那样,我想在页面加载步骤停止。生成的 URL(在 Cypress 中不作为 newURL 存在)有时可以重定向多次。
  • 尝试添加 cy.location('pathname') 而不是 cy.location('href')。
  • 这不再适用于最新版本的 cypress(截至今天为 6.0.1)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-29
  • 1970-01-01
  • 2014-10-02
  • 1970-01-01
  • 1970-01-01
  • 2021-10-19
相关资源
最近更新 更多