使用赛普拉斯处理悬停在菜单上
Handling Hover over menu's using Cypress
我最近偶然发现了 e2e 工具 - Cypress.io。我目前正在为与我合作的公司做 POC,以对 React 应用程序进行端到端测试。它有一个悬停在菜单上的菜单,就像现在大多数网络应用程序一样。
一个例子:
URL : Fmovies
我试图通过悬停单击菜单项,但测试失败,显示 display
设置为 none
。
在Selenium中,我们使用moveElement
的方法去到这个元素,然后做任何我们需要做的事情。但是,我没有使用赛普拉斯这样做。
考虑到现在的菜单,我写了这个
it('goes to specific element in Genre',()=>{
cy.get('#menu').within(()=>{
cy.get('ul').within(()=>{
cy.contains('Family').click();
});
});
});
错误:
Cypress 有一个独特的工作流程,它基于将尽可能多的测试融入其默认行为。在它模拟点击包含 "Family" 的元素之前,它是 checks for actionability。这是一个内置测试,如果元素被隐藏,display:none
(这里就是这种情况),大小 0,0 等,它将失败。只有在通过该测试后,它才会模拟对包含 [ 的元素的操作=29=].
您可以使用 .click({force:true})
覆盖可操作性检查,但这样您就无法保证用户实际上能够找到并单击该元素。
进行此测试的正确方法是触发下拉菜单,使元素可见,然后单击。如果您想找到 "Genre" 菜单项,显示下拉菜单,然后单击 "Family" 项,您将执行以下操作:
describe('Hover Menu',()=>{
it('can click on a genre sub-menu item',()=>{
cy.get('#menu').contains('Genre').next('.sub-menu').then($el=>{
cy.wrap($el).invoke('show')
cy.wrap($el).contains('Family').click()
})
})
})
这里,show
是一个jQuery方法,修改CSS属性使元素可见。
cy.wrap($el)
将 jQuery 元素转换为 Cypress Chainer,然后您可以在其上调用 Cypress 命令。
我最近偶然发现了 e2e 工具 - Cypress.io。我目前正在为与我合作的公司做 POC,以对 React 应用程序进行端到端测试。它有一个悬停在菜单上的菜单,就像现在大多数网络应用程序一样。
一个例子:
URL : Fmovies
我试图通过悬停单击菜单项,但测试失败,显示 display
设置为 none
。
在Selenium中,我们使用moveElement
的方法去到这个元素,然后做任何我们需要做的事情。但是,我没有使用赛普拉斯这样做。
考虑到现在的菜单,我写了这个
it('goes to specific element in Genre',()=>{
cy.get('#menu').within(()=>{
cy.get('ul').within(()=>{
cy.contains('Family').click();
});
});
});
错误:
Cypress 有一个独特的工作流程,它基于将尽可能多的测试融入其默认行为。在它模拟点击包含 "Family" 的元素之前,它是 checks for actionability。这是一个内置测试,如果元素被隐藏,display:none
(这里就是这种情况),大小 0,0 等,它将失败。只有在通过该测试后,它才会模拟对包含 [ 的元素的操作=29=].
您可以使用 .click({force:true})
覆盖可操作性检查,但这样您就无法保证用户实际上能够找到并单击该元素。
进行此测试的正确方法是触发下拉菜单,使元素可见,然后单击。如果您想找到 "Genre" 菜单项,显示下拉菜单,然后单击 "Family" 项,您将执行以下操作:
describe('Hover Menu',()=>{
it('can click on a genre sub-menu item',()=>{
cy.get('#menu').contains('Genre').next('.sub-menu').then($el=>{
cy.wrap($el).invoke('show')
cy.wrap($el).contains('Family').click()
})
})
})
这里,show
是一个jQuery方法,修改CSS属性使元素可见。
cy.wrap($el)
将 jQuery 元素转换为 Cypress Chainer,然后您可以在其上调用 Cypress 命令。