当 Select 包含重复值时使用 Cypress select()

Using Cypress select() When Select Contains Duplicate Values

我需要 select select 中的一个值。 select 是一个国家列表,显示它们的名称,每个选项的值是两个字母的国家代码。我们将 selected 最多的国家排在最前面,同时也将它们保留在字母顺序中。这意味着出现在顶部的项目会重复两次。

<select>
  <option value="gb">UK</option>
  <option value="us">USA</option>
  <option value="af">Afganistan</option>
  <option value="ai">Aland Islands</option>
  ...
  <option value="us">USA</option>
  ...
  <option value="us">UK</option>
  ...
</select>

我 select 的值是这样的:

cy.getSelect().select('gb')

但是,这会引发错误:

CypressError: Timed out retrying: cy.select() matched more than one option by value or text: gb

这是有道理的,因为 'UK' 的值是 gb,它出现在列表的顶部和列表中的字母顺序位置。

如何告诉赛普拉斯忽略重复值和 select 第一个匹配项?

请注意,我不能保证任何国家/地区的索引,并且我还有很多其他 select 不同国家/地区的测试。我需要一种方法来告诉 Cypress select 第一场比赛。

这里有几个来源可供查看: https://docs.cypress.io/api/commands/select.html#Text-Content& https://docs.cypress.io/api/commands/eq.html#Syntax

我建议尝试的方法如下: cy.get('select').select('gb').eq(0) 要么 cy.get('select').select('gb').first()

如果找到重复项,这两个选项中的任何一个都会抓取第一个项目。你可以用 eq() 做的其他事情是 eq(-1) 用于最后一项,或 eq(2) 用于第三项(基数为零)等等。

编辑:使用 cy.get('select') 而不是 cy.getSelect();

您可以尝试下拉至 jQuery/JavaScript 以手动设置字段:

cy.get('select').then($country => {$country.val("gb")})

上面的 $country 应该是一个 jQuery 对象包裹着您选择的 html。

参见:https://docs.cypress.io/api/commands/then.html#Syntax