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

dy2hfwbg  于 2022-12-02  发布在  Java
关注(0)|答案(3)|浏览(170)

我需要在select中选择一个值。select是一个国家列表,显示它们的名称,每个选项的值都是一个两个字母的国家代码。我们将最常选择的国家显示在顶部,同时将它们保留在字母位置。这意味着显示在顶部的项目会重复两次。

<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="gb">UK</option>
  ...
</select>

我选择的值如下所示:

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

但是,这会引发错误:
Cypress错误:重试超时:cy.select()通过值或文本匹配多个选项:国标
这是有意义的,因为'UK'的值是gb,它出现在列表的顶部,并在列表中按字母顺序排列。

如何让Cypress忽略重复值并选择第一个匹配项?

请注意,我不能保证任何国家的指数,我有很多其他的测试,选择不同的国家。我需要一种方法来告诉Cypress选择第一个匹配。

f0ofjuux

f0ofjuux1#

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

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

上面的$country应该是一个jQuery对象,它封装了您选择的html。
请访问:https://docs.cypress.io/api/commands/then.html#Syntax

o8x7eapl

o8x7eapl2#

以下是一些可供参考的来源:https://docs.cypress.io/api/commands/select.html#Text-Contenthttps://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();

w7t8yxp5

w7t8yxp53#

Cypress为cy.select()增加了一些功能,现在可以按位置选择。
使用us值进行测试,因为gb是默认选定值(它位于列表顶部)

cy.get('select')
  .find('[value="us"]')
  .eq(1)                                               // to pick the 2nd occurrence 
  .then($option => {
    const $select = $option.prevObject.prevObject      // back to <select>
    cy.wrap($select).select($option.index())           // select this option
  })

cy.get('select').should('have.value', 'us')            // confirm

相关问题