【问题标题】:How can all options from a drop-down list (select) box be tested in Cypress?如何在 Cypress 中测试下拉列表(选择)框中的所有选项?
【发布时间】:2018-12-03 21:03:35
【问题描述】:

我们如何从一个普通的下拉列表框中选择所有options 并使用赛普拉斯验证它们?

<select id="cars_list">
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="mercedes">Mercedes</option>
  <option value="audi">Audi</option>
</select>
//The below test can check only for one option, how can we verify the rest? 

describe("Select all values from drop down list", function() {
  it("Cypress test and verify all options", function() {
  cy.visit("Https://sometestingsite.com")  
  cy.get('#cars_list').then(function($select){
   $select.val('volvo')
   })
   cy.get('select').should('have.value', 'volvo')
   });
});

【问题讨论】:

  • 你考虑过某种循环吗?但是,如果你选择一个值,那么测试它真的有价值吗?
  • 也许错误的代码掩盖了问题——我认为测试是为了确认选项列表具有预期值——你能确认@soccerway 吗?
  • 是的,我想确认 option list 具有预期值。有人投了反对票,不知道为什么?
  • 很抱歉对您的代码发表了严厉的评论。您能否在 select 元素上显示 DOM?我想你可能会使用 cy.get('#cars_list').its('options').then(options =&gt; ...) 之类的东西。
  • 好的,DOM 与您已经展示的完全一样。也许cy.get('#cars_list option').then(options =&gt; ...) 适合?

标签: javascript cypress


【解决方案1】:

我建议测试可能看起来像这样

cy.get('#cars_list option').then(options => {
  const actual = [...options].map(o => o.value)
  expect(actual).to.deep.eq(['volvo', 'saab', 'mercedes', 'audi'])
})

cy.get('#cars_list').children('option').then(options => {
  const actual = [...options].map(o => o.value)
  expect(actual).to.deep.eq(['volvo', 'saab', 'mercedes', 'audi'])
})

cy.get('#cars_list').find('option').then(options => {
  const actual = [...options].map(o => o.value)
  expect(actual).to.deep.eq(['volvo', 'saab', 'mercedes', 'audi'])
})

使用cy.get() 选择多个子元素,然后使用[...options] 将它们展开,使用.map(o =&gt; o.value) 映射到它们的值并使用深度等于比较数组。

我没有对此进行测试,因此代码可能需要一些调整。

【讨论】:

  • 我收到类似cypress_runner.js:161489 TypeError: Invalid attempt to spread non-iterable instance的错误
  • 也许 console.log 选项。我们期望 Cypress 选择多个元素,所以它应该是可迭代的。
  • 我刚刚注意到您询问了否决票。不是我,我投了赞成票。可能只是一些巨魔经过。
  • 没问题 Hiram,这与上面的代码 HTML DOM 一起工作。但是我可以问最后一件事,如果select 标签在 html DOM 中有&lt;option selected="selected" disabled="true"&gt;--Please Select --&lt;/option&gt;,同时运行其计数数组 5,AssertionError: expected [Array(5)] to deeply equal [Array(4)]
  • 谢谢,我用 shift() 去掉第一个值,现在一切都好
猜你喜欢
  • 2019-09-23
  • 1970-01-01
  • 1970-01-01
  • 2017-10-17
  • 2019-07-29
  • 2013-11-05
  • 1970-01-01
  • 2018-05-10
  • 2020-12-18
相关资源
最近更新 更多