赛普拉斯-选择一个选项而不使用文本或值

时间:2018-12-10 15:54:04

标签: testing automation qa cypress

这就是我要选择的:

<select id="firstDate" name="firstDate" class="ab-abcd sdfg">
<option disabled="" value="">First day</option>
<option value="01.02.2019">01.02.2019</option>
<option value="01.02.2019">01.02.2019</option>
</select>

此日期将不时更改,因此有一种方法可以在不使用Cypress的情况下选择一个选项

cy.get('#firstDate').select('01.01.2019')

我也尝试过

cy.get('#firstDate').first()

但这似乎不起作用。

3 个答案:

答案 0 :(得分:4)

我认为更改值的最佳方法是通过.select()。如果您尝试强制单击一个选项,它将不会更改所选的值。

导致此值更改的原因是什么?如果它们是根据服务器请求生成的,则可以尝试将其存根like this。如果它们是在给定当前日期的情况下生成的,则可以尝试using clocks

编辑在知道使选择器动态化的原因之后:

要确定测试日期并使其一致,可以执行

// fix the date before rendering the select
const now = new Date(2019, 01, 15).getTime() //  2019-01-02 timestamp
cy.clock(now)

cy.visit('/index.html') // visit the page to test (or make actions that render the select)
cy.get('#firstDate').select('01.02.2019') // select one month beyond
cy.get('#firstDate').select('01.03.2019') // select two months beyond

亚历克斯

答案 1 :(得分:1)

您的第二次尝试非常接近,但是您得到的是select元素,而不是option元素。试试这个:

cy.get('select#firstDate').click() // Open the dropdown
cy.get('select#firstDate > option')
  .eq(1) // The second option, because the first is a heading
  .click()

答案 2 :(得分:0)

感谢您的回答。在此期间,找到了适合我的解决方案:

    cy.get('#FirstDate')
   .find('option')
   .then($elm => $elm.get(1).setAttribute('selected', "selected"))
   .parent()
   .trigger('change')

但是我也会尝试您的建议,让您知道发生了什么事。