javascript 如何在Cypress中从下拉列表中选择随机选项

gkl3eglg  于 2022-10-30  发布在  Java
关注(0)|答案(4)|浏览(312)

我正在尝试从下拉列表中选择一个随机选项。到目前为止,我没有找到任何有用的答案。我没有问题选择一个特定的选项,因为所有的值都有ID集。
这是简单/直接的,其工作原理是:

const log = new loginPage()
            log.visit()
            log.loginEmail('test')
            log.loginPassword('test')
            log.submit()
            cy.get('#link-new-application').click()
            cy.get('#control-nationality').click()
            cy.get('#option-nationality-DZA').click()

随机选择有什么建议吗?我是一个初学者,所以任何帮助都将不胜感激。
这是HTML:

1szpjjfi

1szpjjfi1#

赛普瑞斯带着洛达什烤在里面。
Lodesh带来了很多方便的实用方法,使用sample方法,您可以从集合中随机获取一个项目。
https://docs.cypress.io/api/utilities/_#Syntax
https://lodash.com/docs#sample

cy.get('id^="option-nationality-"]')
  .then(options => {
    cy.get(Cypress._.sample(options)).click()
})
w80xi6nr

w80xi6nr2#

一种方法是获取所有选项,然后随机单击其中一个

cy.get('#control-nationality').click()  // open the dropdown

cy.get('id^="option-nationality-"]')    // all elements with id starting "option-nationality"
  .then($options => {
    const count = $options.length
    const randomIndex = Math.floor(Math.random() * count)
    const randomOption = $options.eq(randomIndex) 
    cy.wrap(randomOption).click()
  })
6ojccjat

6ojccjat3#

tlolkema给出的Lodash例子有一些错误。
options参数是一个对象,而不是一个数组。它对每个选项都有一个编号属性,但它也有以下属性

  • length
  • prevObject
  • selector

Lodash sample()方法可以在对象上运作,但它会传回对象的其中一个属性。
因此,有时候Cypress._.sample(options)会返回上面列出的三个属性之一,而您的测试会因为意外原因而失败。
正确的方法是先将options转换为数组。
您也可以cy.wrap()选取的选项,而不是cy.get()它。

cy.get('id^="option-nationality-"]')
  .then(options => {
    const sample = Cypress._.sample(options.toArray())
    cy.wrap(sample).click()
})
j9per5c4

j9per5c44#

试试这个解决方案-

cy.get('<element ID>').then((element)=>{

const totalLength = element.length

const randomIndex = Math.floor(Math.random() * totalLength)

element[randomIndex].click()

})

相关问题