jquery 点击在cypress中不包含href的链接

j7dteeu8  于 2023-10-17  发布在  jQuery
关注(0)|答案(3)|浏览(102)

我正在自动化我的回归检查表,我被困在一个测试用例中,在这个测试用例中,我必须测试一个在新选项卡中打开的链接,因为Cypress不支持多个选项卡,所以我想在同一个选项卡中打开那个链接。问题是按钮在标签中不包含任何href链接。这就是课堂。
注意:如果存在href,下面显示的代码片段可以正常工作。

<a rel="noopener noreferrer" target="_blank">
<div class="tooltip" style="width: fit-content;">
<span class="tooltip-trigger">
<button class="button-wrapper default undefined undefined mr-3">Preview</button>
</span>
</div>
</a>

我试过很多工作,但没有一件对我有效。有些人如下。

cy.xpath('/html/body/div[1]/div[1]/header/div[2]/a')
          .should('have.attr', 'href').and('include', 'Preview')
          .then((href) => {
            cy.visit(href)
          })

另一个工作区。

cy.xpath("/html/body/div[1]/div[1]/header/div[2]/a")
        .first()
            .should(($a) => {
              $a.attr("target", "_self");
            }).click();

我也试过这个。

cy.xpath("/html/body/div[1]/div[1]/header/div[2]/a")
.invoke("removeAttr", "target")
          .click();

期待社区的回复。

rfbsl7qr

rfbsl7qr1#

下面的解决方案在我的情况下工作。

cy.window().then((win) => {
  cy.stub(win, "open")
    .callsFake((url) => {
      return win.open.wrappedMethod.call(win, url, "_self");
    })
    .as("open");
});
cy.get("a").contains("Preview").click();
cy.get("@open").should(
  "have.been.calledWithMatch",
  "{your url}"
);

你可以在这里阅读更多关于这个解决方案的信息。https://glebbahmutov.com/blog/cypress-tips-and-tricks/#deal-with-windowopen

brtdzjyr

brtdzjyr2#

我不确定这样做是否有效,但由于<a>元素上没有href,我假设新选项卡是由<button>onclick处理程序打开的。
我会首先对onclick进行重新编译,并Assert它被调用。

const stub = cy.stub()
cy.get('button')
  .then($button => {
    $button[0].onclick = stub
  })
  .click()

cy.wrap(stub).should('be.called')

然后,要在新选项卡URL处继续测试,请打开另一个测试并直接cy.visit()该URL。

ux6nzvsh

ux6nzvsh3#

当我遇到这个问题时,我将目标属性更改为_self。我不确定我的选择器是否会得到a元素。我不知道是否与类工具提示触发器的跨度是唯一的。

cy.get(`span[class="tooltip-trigger"]`)
.should('be.visible')
.parent()
.parent()
.parent()
.find('a')
.and('have.attr', 'target' , '_blank')
.invoke('attr', , 'target' , '_self')
.click()

//assert location

相关问题