如何从柏树中的单个元素查询多个事物
How to query multiple things from a single element in cypress
我正在尝试在 cypress 中测试 popup/modal 的内容。我的第一直觉是重复命令来获取模态元素,如下所示:
it('filter modal/popup', () => {
cy.get('.some-button').click();
cy.get('.some-modal').contains('abc').should('be.visible');
cy.get('.some-modal').contains('def').should('be.visible');
cy.getByCyTag('.some-modal').contains('xyz').should('be.visible');
});
不过,“身为程序员”,查询'folder-tree-filter-modal'三次甚至更多次,让我有点不适应。由于您不能将 cypress 对象存储在变量中,因为它们会产生结果,因此我尝试使用 cypress 的 then() 基于承诺的语法,但这看起来也并没有好多少:
it('filter modal/popup', () => {
cy.get('.some-button').click();
cy.get('.some-modal').then((modal) => {
cy.wrap(modal).should('be.visible');
cy.wrap(modal).contains('abc').should('be.visible');
cy.wrap(modal).contains('def').should('be.visible');
cy.wrap(modal).contains('xyz').should('be.visible');
});
});
我是想多了还是有更好的方法?
假设 cy.getByCyTag('file-tree-facette-search')
翻译成类似 cy.get('file-tree-facette-search')
的内容,那么您使用 each
命令进行循环,例如:
const values = ['abc', 'def', 'xyz']
cy.getByCyTag('file-tree-facette-search').each(($ele, index) => {
cy.getByCyTag('folder-tree-filter-modal')
.contains(values[index])
.should('be.visible')
})
或者您可以直接应用传统的 forEach
如果它适用于您的用例,如下所示:
const values = ['abc', 'def', 'xyz']
values.forEach((val) => {
cy.getByCyTag('folder-tree-filter-modal').contains(val).should('be.visible')
})
我想我一直在寻找的是 add aliases 柏树查询的能力。
这允许做这样的事情:
cy.getByCyTag('folder-tree-filter-modal').as('modal');
cy.get('@modal').should('be.visible');
cy.get('@modal').contains('Darstellungsoptionen').should('be.visible');
cy.get('@modal').contains('Nur Dateien mit Treffer anzeigen').should('be.visible');
cy.get('@modal').contains('Genauigkeiten').should('be.visible');
cy.get('#modal-facette-search .modal__inner').scrollTo('bottom');
cy.get('@modal').contains('Dateitypen').should('be.visible');
cy.get('#modal-facette-search .modal__inner').scrollTo('bottom');
cy.get('@modal').get('.modal--active .modal__close').click();
cy.get('@modal').should('not.be.visible');
这只是将命令链接到同一个对象,而无需重新键入整个选择器。
您需要使用 .within()
命令。所有后续的 cy 命令都将在一个元素内查询。
it('filter modal/popup', () => {
cy.get('.some-button').click();
cy.get('.some-modal').within( ()=> {
cy.contains('abc').should('be.visible');
cy.contains('def').should('be.visible');
cy.contains('xyz').should('be.visible');
});
});
我正在尝试在 cypress 中测试 popup/modal 的内容。我的第一直觉是重复命令来获取模态元素,如下所示:
it('filter modal/popup', () => {
cy.get('.some-button').click();
cy.get('.some-modal').contains('abc').should('be.visible');
cy.get('.some-modal').contains('def').should('be.visible');
cy.getByCyTag('.some-modal').contains('xyz').should('be.visible');
});
不过,“身为程序员”,查询'folder-tree-filter-modal'三次甚至更多次,让我有点不适应。由于您不能将 cypress 对象存储在变量中,因为它们会产生结果,因此我尝试使用 cypress 的 then() 基于承诺的语法,但这看起来也并没有好多少:
it('filter modal/popup', () => {
cy.get('.some-button').click();
cy.get('.some-modal').then((modal) => {
cy.wrap(modal).should('be.visible');
cy.wrap(modal).contains('abc').should('be.visible');
cy.wrap(modal).contains('def').should('be.visible');
cy.wrap(modal).contains('xyz').should('be.visible');
});
});
我是想多了还是有更好的方法?
假设 cy.getByCyTag('file-tree-facette-search')
翻译成类似 cy.get('file-tree-facette-search')
的内容,那么您使用 each
命令进行循环,例如:
const values = ['abc', 'def', 'xyz']
cy.getByCyTag('file-tree-facette-search').each(($ele, index) => {
cy.getByCyTag('folder-tree-filter-modal')
.contains(values[index])
.should('be.visible')
})
或者您可以直接应用传统的 forEach
如果它适用于您的用例,如下所示:
const values = ['abc', 'def', 'xyz']
values.forEach((val) => {
cy.getByCyTag('folder-tree-filter-modal').contains(val).should('be.visible')
})
我想我一直在寻找的是 add aliases 柏树查询的能力。
这允许做这样的事情:
cy.getByCyTag('folder-tree-filter-modal').as('modal');
cy.get('@modal').should('be.visible');
cy.get('@modal').contains('Darstellungsoptionen').should('be.visible');
cy.get('@modal').contains('Nur Dateien mit Treffer anzeigen').should('be.visible');
cy.get('@modal').contains('Genauigkeiten').should('be.visible');
cy.get('#modal-facette-search .modal__inner').scrollTo('bottom');
cy.get('@modal').contains('Dateitypen').should('be.visible');
cy.get('#modal-facette-search .modal__inner').scrollTo('bottom');
cy.get('@modal').get('.modal--active .modal__close').click();
cy.get('@modal').should('not.be.visible');
这只是将命令链接到同一个对象,而无需重新键入整个选择器。
您需要使用 .within()
命令。所有后续的 cy 命令都将在一个元素内查询。
it('filter modal/popup', () => {
cy.get('.some-button').click();
cy.get('.some-modal').within( ()=> {
cy.contains('abc').should('be.visible');
cy.contains('def').should('be.visible');
cy.contains('xyz').should('be.visible');
});
});