javascript 如何在Cypress中从下拉按钮中选择多个复选框项目

x9ybnkn6  于 2023-01-19  发布在  Java
关注(0)|答案(2)|浏览(181)

大家好我是新来的柏树
我有一个下拉复选框按钮,必须从其中一次选择多个值

为此,我在类型脚本中创建了一个本地函数,如下所示

函数调用

selectItems('Item 1','Item 4')

函数定义

selectItems(value1: any, value2: any){
cy.get('dropdownlocator').click();
cy.get('dropdownlocatorCheckboxItems').contains(value1).click();
cy.get('dropdownlocatorCheckboxItems').contains(value2).click()
}

这是工作正常,但我想要的是,而不是做硬编码的每个值,我应该使它如此通用,如果我传递一个值在param中,它将工作,或者如果我传递超过2个值,它也应该工作

n6lpvg4x

n6lpvg4x1#

有两件事你可以看看:
The arguments object
这是每个函数调用的隐藏对象,可用于确定传入了哪些参数,而无需定义传入的内容

selectItems() {
  cy.wrap(arguments).each(value => {
    cy.contains('dropdownlocatorCheckboxItems', value).click()
  })
})
...
selectItems(value1)

selectItems(value1, value2)

这可能会给Typescript编译器带来麻烦,这是一种较老的预打印技术。
还有Rest parameters

selectItems(...theValues) {
  for (const value of theValues) {
    cy.contains('dropdownlocatorCheckboxItems', value).click()
  }
})
...
selectItems(value1)

selectItems(value1, value2)

将参数类型更改为字符串数组是幼稚的。
您只需将问题转移到函数调用之前的行

const selectItems(values: string[]) = {
 ...
})

const values = [value1, value2]  // might as well just put these in the call params
selectItems(values)
jchrr9hc

jchrr9hc2#

您可以将函数的签名更改为数组,并使用.forEach迭代数组值。

const selectItems(values: string[]) = {
  cy.get('dropdownlocator').click().then(() => {
    // Add the forEach inside a .then to ensure it happens after you click the `dropdownlocator`
    values.forEach((value) => {
      cy.get('dropdownlocatorCheckboxItems').contains(value).click();
    }
  }
}
...
selectItems(['foo', 'bar', 'baz']);
selectItems(['foo']);

相关问题