css - 如何使用 Cypress 从 react 下拉列表中进行选择

标签 css xpath cypress

学习 Cypress:我有以下代码。我能够让它工作,但这似乎不是正确的方法。此页面上有 25 个类似的下拉菜单

有人可以在这里提供一些指导吗?谢谢

// choice = 'No' or 'Yes" in this case
setSellChargeOffs(choice){
  cy.get('[dt-label="sellChargeOffFlag"].ui.selection.dropdown').click()
    .xpath(`//div[@dt-label='sellChargeOffFlag']/div[contains(@class, 'menu')]/div[@role='option']/span[text()='${choice}']`)
    .click();
} 

html

<div dt-label="sellChargeOffFlag" role="listbox" aria-expanded="true" class="ui active visible selection dropdown" tabindex="0">
   <div aria-atomic="true" aria-live="polite" role="alert" class="divider default text">Yes</div>
   <i aria-hidden="true" class="dropdown icon" />
   <div class="visible menu transition">
      <div role="option" aria-checked="false" aria-selected="true" class="selected item" style="pointer-events: all;">
         <span class="text">Yes</span>
      </div>
      <div role="option" aria-checked="false" aria-selected="false" class="item" style="pointer-events: all;">
         <span class="text">No</span>
      </div>
   </div>
</div>

最佳答案

Cypress 已删除 cypress-xpath,因此您最好坚持使用开始时使用的 CSS 语法。

  • CSS 更具可读性
  • 使用 xpath 实际上没有任何好处
  • 您无需添加软件包

不要在.click()之后链接更多查询

这里有一个警告:click()

It is unsafe to chain further commands that rely on the subject after .click()

所以点击后不要使用.xpath().get()

据我了解,原因是 click() 是一个可能导致 DOM 重新渲染的操作(即有一个事件处理程序),并且如果您以这种方式链接进一步的查询您现在正在使用旧版本的 DOM。

不要为每个下拉菜单创建一个功能

setSellChargeOffs(choice) 仅适用于一个下拉列表 - 您打算再制作 24 个类似的下拉列表吗?

相反,参数化一个可以切换任何下拉菜单的函数

setDropdown (name, choice) {

  const dropdownSelector = `[dt-label="${name}"].dropdown`; 

  cy.get(dropdownSelector).click()

  cy.get(`${dropdownSelector} div.menu div[@role='option']`)
    .find(`span:contains(${choice})`)
    .click()
} 

关于css - 如何使用 Cypress 从 react 下拉列表中进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76815827/

相关文章:

html - 只有在垂直边缘上有 div 的垂直滚动条

c# - Umbraco - 通过 URL 选择节点

python - 使用 XPath 检索 span 类中的文本

graphql - 如何使用 cypress stub 对 graphql 的调用?

html - 当 flexbox 中只有一个元素时居中

javascript - 使用 Css、Html 和 Javascript 创建渐变图 block

CSS : Hovering affect

php - 为什么 'child' 和 'descendant' 在此 domdocument() 查询中给出相同的结果?

jenkins - 截至 2019 年 2 月 18 日,还有其他人遇到 cypress.io 测试开始失败的情况吗?

Cypress - 在一个测试中创建动态电子邮件,如何将其传播到所有其他单独的测试?