我在表中选择了多个单元格,而要选择所有单击的单元格,必须按下控制键:
cy.get("[data-cy=cell-1],[data-cy=cell-5],[data-cy=cell-32]")
.click({ multiple: true, ctrlKey: true})它工作很好,我看到多个选择,因为选定的单元格有一个不同的背景颜色。我对页面进行了编码,因此当窗口:控件键上的keyup事件发生时,会打开一个对话框来编辑单元格内容。这在dev上运行得很好,但是对于柏树,.click({ multiple: true, ctrlKey: true})不会触发我的对话框,如果之后有一个手动的.type({ctrl}),它会触发对话框,但是多个选择都丢失了。
cy.get("[data-cy=cell-1],[data-cy=cell-5],[data-cy=cell-32]")
.click({ multiple: true, ctrlKey: true})
cy.get("#my-table-container").type("{ctrl}")它的作用就像我的第一个click({multiple: true, ctrlKey: true}),控制键是按下,但从来没有释放。你知道我如何使用点击倍数和控制,但触发的钥匙在最后?
UPDATE:@HostListener安装I on角度12,下面是如何使用@HostListener设置密钥事件(我还侦听了转义键以清除单元格选择):
@HostListener("window:keyup", ["$event"])
handleKeyDown(event: KeyboardEvent) {
switch(event.key){
case "Escape": this.clearSelection(); break;
case "Control":this.openEditDialog(); break;
}
}发布于 2022-05-21 11:52:35
看起来,Cypress不像HostListener设置那样使用event.key而不是event.keyCode (这是不推荐的)。在我的组件@HostListener中,我修改了使用event.keyCode === 17,它起了作用。
发布于 2022-05-20 21:03:30
由于您使用的是window:keyup事件,所以可以尝试触发该事件,假设它是在ctrl键上触发的(代码17)。
cy.get("[data-cy=cell-1],[data-cy=cell-5],[data-cy=cell-32]")
.click({ multiple: true, ctrlKey: true})
cy.get("#my-table-container").trigger('keyup', { keyCode: 17 })此外,按键/按键组合可能工作得更好(无论是否在.click()上使用.click()修饰符)
cy.get('#my-table-container').trigger('keydown', { keyCode: 17 })
cy.get('[data-cy=cell-1]').click({ctrlKey: true})
cy.get('[data-cy=cell-5]').click({ctrlKey: true})
cy.get('[data-cy=cell-32]').click({ctrlKey: true})
cy.get('#my-table-container').trigger('keyup', { keyCode: 17 })最后,.trigger()的目标可能需要不同于#my-table-container,这取决于addEventListener()的调用方式。需要查看更多的HTML和源代码才能确定。
角@HostListener
如果@HostListener装饰器设置了一个事件侦听器,如下所示
@HostListener("window:keyup", ["$event"])
onKeyup(event: KeyboardEvent): void {
event.preventDefault();
console.log('keyup', event)
}当您查看console.log时,该事件具有path属性path: (4) [body, html, document, Window],这意味着您可以在<body>上触发它。
要进行检查,以下测试通过
it('triggers keyup set by @HostListener on window', () => {
let ev;
cy.visit('http://localhost:4200').then(win => {
cy.stub(win.console, 'log', (eventName, event) => {
ev = event
}).as('consoleLog')
})
cy.get('body').trigger('keyup', {keyCode:17})
cy.get('@consoleLog')
.should(() => {
expect(ev.type).to.equal('keyup')
expect(ev.keyCode).to.equal(17)
})
})因此,要触发对话框
cy.get("[data-cy=cell-1],[data-cy=cell-5],[data-cy=cell-32]")
.click({ multiple: true, ctrlKey: true})
cy.get('body')
.focus()
.trigger('keyup', { keyCode: 17 })https://stackoverflow.com/questions/72321437
复制相似问题