这就是我要选择的:
<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()
但这似乎不起作用。
答案 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')
但是我也会尝试您的建议,让您知道发生了什么事。