在 vuetify 中使用 cypress

Nea*_*kit 6 vue.js e2e-testing vuetify.js cypress

我有一个 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> 
Run Code Online (Sandbox Code Playgroud)

我在搜索输入中输入一些文本。然后在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>
...
Run Code Online (Sandbox Code Playgroud)

然后我想通过单击找到的结果之一来选择搜索项之一。为此,我应该使用 Vuetify 的本机类,但它没有稳定性(.v-list__tile--link类?由开发人员重命名)。如何将 data-cy 选择器添加到结果搜索 html 项中?也许谁知道解决这个问题的其他方法?

Ric*_*sen 9

我不认为v-list__tile--link开发人员可以更改它,它似乎是由 Vuetify 库在运行时 DOM 添加的(除非您指的是 Vuetify 开发人员,然后确保它可以在版本之间更改)。

无论如何,如果您希望选择器更加面向内容,请使用 Cypress .parent()选择器

例如,

cy.contains('div', 'itemTextToSelect').parent('a').click()
Run Code Online (Sandbox Code Playgroud)

如果可能,请确保“itemTextToSelect”确实独特(如果您可以在测试装置中设置它)。


顺便说一句,在用户开始输入自动完成列表之前display: none,因此您需要.type('something')输入输入或.click({force: true})项目。