Cypress 断言:当 cy.get() 匹配多个元素时,行为是什么?

tho*_*nic 0 html testing cypress

我无法找到解释赛普拉斯断言在cy.get()匹配多个元素时如何工作的文档。例如:

标记:

<div>
  <button>one</button>
  <button class='green'>two</button>
  <button disabled>three</button>
</div>
Run Code Online (Sandbox Code Playgroud)

测试:

cy.get('button').should('be.disabled');
Run Code Online (Sandbox Code Playgroud)

赛普拉斯是否断言:

  1. 第一个匹配的元素通过?
  2. 所有匹配的元素都通过了吗?
  3. 至少有一个要素通过了?

根据经验,我猜测这是选项 3,但我无法在文档中找到明确解决的问题。

然而

cy.get('button').click();
Run Code Online (Sandbox Code Playgroud)

点击...只有第一个按钮?他们全部?

关于断言,恐怕我们无意中编写了在我们的选择器偶然匹配多个元素并且其中一个元素恰好与断言标准匹配的情况下通过的测试。

显然,通过编写良好的选择器,或者如果我们希望返回多个元素,或者如果我们想显式断言多个元素,或者使用 or ,可以避免这种情况。我主要是寻找对行为的确认,以便我了解 Cypress 在选择多个元素(有意或无意)的情况下如何工作。.first().last().each()

Tes*_*ick 5

这取决于断言。

这里有一个例子多个元素

<ul id="greetings">
  <li>Hello</li>
  <li>Hi</li>
  <li>Aloha</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
cy.get('#greetings li')
  .should('include.text', 'Hello')
  .and('include.text', 'Hi')               // "include" allows any one 
  .and('include.text', 'Aloha')
  .and('have.text', 'HelloHiAloha')
  // let's check the jQuery text() method
  .invoke('text')
  .should('equal', 'HelloHiAloha')         // must match all 3 texts
Run Code Online (Sandbox Code Playgroud)

将会include.text适用于任一元素,但have.text适用于组合的所有元素。

cy.get('#greetings li')
  .should('have.text', 'Hello')    // fails
Run Code Online (Sandbox Code Playgroud)

关于什么be.disabled

来自chai-jquery

残疾人

使用 .is(':disabled')断言所选内容中至少有一个元素被禁用。

作为一个相反的例子,

属性(名称[,值])

使用 .attr()断言选择的第一个元素具有给定的属性。(可选)还可以断言特定值。返回值可用于链接。

一般来说,Cypress 遵循其使用的库制定的规则,因此本文档对于您的问题来说是一个很好的参考。