我有一个 Vue.js 项目 (Nuxt.js),我使用 Vuetify 作为 UI。 对于 e2e 测试,我使用 Cypress。
以下是我在 Cypress 中的测试场景:
我在为使用 v-autocomplete 组件的页面创建测试时遇到问题。 问题是我无法使用 Vuetify 原生类来获取我想要测试的元素。 下面是一个带有 data-cy 选择器的示例
<v-autocomplete
v-model="model"
:items="items"
item-text="Description"
item-value="API"
label="Public APIs"
placeholder="Start typing to Search"
data-cy="autocomplete"
></v-autocomplete>
我在搜索输入中输入一些文本。 然后在v-autocomplete中已经找到了搜索结果。 其中之一的示例如下:
...
<div>
<a class="v-list__tile v-list__tile--link theme--light">
<div class="v-list__tile__content">
<div class="v-list__tile__title">Result item
<span class="v-list__tile__mask">result item</span>
</div>
</div>
</a>
</div>
...
然后我想通过单击找到的结果之一来选择搜索项之一。 为此,我应该使用 Vuetify 的原生类,但它不具有稳定性(
.v-list__tile--link
类可以由开发人员重命名)。
如何将 data-cy 选择器添加到结果搜索 html 项目中?
也许谁知道解决这个问题的其他方法?
我不认为
v-list__tile--link
可以由开发人员更改,它似乎是由 Vuetify 库在运行时 DOM 添加的(除非您指的是 Vuetify 开发人员,那么确保它可以在版本之间更改)。
无论如何,如果你想在选择器中更加以内容为导向,请使用 Cypress .parent() 选择器
例如,
cy.contains('div', 'itemTextToSelect').parent('a').click()
如果可能,请确保 'itemTextToSelect' 确实独特(如果可以在测试装置中设置它)。
顺便说一句,在用户开始输入之前,自动完成列表是
display: none
,因此您需要 .type('something')
输入,或 .click({force: true})
项目。