【问题标题】:Cypress testing, is there a way to reset the subject after using "have.attr"?赛普拉斯测试,有没有办法在使用“have.attr”后重置主题?
【发布时间】:2022-08-02 23:43:41
【问题描述】:

我还是赛普拉斯的新手,但这种行为让我很生气。 提前感谢您的帮助! 因此,在 2 页上进行 2 次测试。 我可以在先前测试的页面上运行此代码:

        cy.get(\'meta[property=\"article:tag\"]\')
            .should(\"have.attr\", \"content\")
            .and(\"include\", subex_subscriberexclusive_only)
            .and(\"not.include\", subex_subscriberexclusiveBeta_only);

然后在随后的测试中,在另一个页面上,我运行相同的代码,并且似乎通过“not.include”步骤,这次主题已经改变。至少那是我得到的错误。

所以相同的代码,只是交换变量,因为测试是为了确保在第二页上相反:

        cy.get(\'meta[property=\"article:tag\"]\')
            .should(\"have.attr\", \"content\")
            .and(\"include\", subex_subscriberexclusiveBeta_only)
            .and(\"not.include\", subex_subscriberexclusive_only);

错误内容如下:

The invalid subject you asserted on was:
  > undefined

另一个奇怪的事情是,如果我注释掉“not.include”测试,一切都会通过。 我猜测在“包含”测试之后主题会发生变化,这就是主题发生变化的地方。

那么有没有办法重新设置主题呢?或者我应该用另一种方式来构建这个测试吗?我不想仅仅评论负面测试,我想知道我们有我们需要的东西,而不是我们不需要的东西(而且它第一次起作用)。

我尝试过的其他一些事情是使用 invoke 及其,但这似乎会导致相同的结果,但仅适用于第二页。我还可以删除第一页上的第一个测试或交换订单,它总是挂在这里。也许我犯了一个错字,我需要重新审视。无论如何,谢谢!

最新尝试:

        cy.get(\'meta[property=\"article:tag\"]\')
            .should(\"have.attr\", \"content\")
            .should(($meta) => {
                expect($meta).to.include(subex_subscriberexclusiveBeta_only)
                expect($meta).not.to.include(subex_subscriberexclusive_only)
            })

一样挂机。

谢谢!

    标签: cypress e2e-testing chain


    【解决方案1】:

    这里只是一个猜测,但我猜你可能会遇到类似的事情,我注意到should("not.have.attr", ...) 链接器似乎将属性的值作为下一个主题返回。我还没有找到任何关于这方面的文档,但在一些轻微的故障排除中,我似乎就是这种情况。

    我建议尝试弄清这是否也影响您的是尝试上一个代码示例的以下变体之一。

            cy.get('meta[property="article:tag"]')
                .should(($meta) => {
                    cy.wrap($meta).should("have.attr", "content")
                    expect($meta).to.include(subex_subscriberexclusiveBeta_only)
                    expect($meta).not.to.include(subex_subscriberexclusive_only)
                })
    

    或者在包装元素上使用expect 而不是should

            cy.get('meta[property="article:tag"]')
                .should(($meta) => {
                    expect($meta).to.have.attr("content");
                    expect($meta).to.include(subex_subscriberexclusiveBeta_only)
                    expect($meta).not.to.include(subex_subscriberexclusive_only)
                })
    

    如果这能解决您的问题,我不是 100%,但它可能会帮助了解其他人是否在其他出色的赛普拉斯文档中遇到了类似的障碍或差距。

    【讨论】:

      猜你喜欢
      • 2020-11-06
      • 2021-10-29
      • 2018-05-01
      • 2021-10-14
      • 1970-01-01
      • 2023-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多