cypress - 使用同级调用时,覆盖 get 命令出错
问题描述
再会。有错误:
The command that returned the promise was:
> cy.contains()
The cy command you invoked inside the promise was:
> cy.fixture()
get
当使用带有兄弟包含的重写方法时。
覆盖命令代码:
Cypress.Commands.overwrite('get', (originalFn, selector, options) => {
cy.fixture('selectors').then((selectorsJson) => {
if (selectorsJson.hasOwnProperty(selector)) {
return originalFn(selectorsJson[selector], options)
}
return originalFn(selector, options)
})
})
使用示例:
cy.get("selectorKey").contains('Some text').click()
解决方案
找到了一种解决方法,但它需要在每个必需的测试中都有额外的逻辑。(在示例覆盖 get 命令的情况下,可能不需要它)。
我的解决方案:
命令:
Cypress.Commands.overwrite('get', (originalFn, selector, options) => {
if (options.hasOwnProperty("selectors") && options.selectors.hasOwnProperty(selector)) {
return originalFn(options.selectors[selector], options)
}
return originalFn(selector, options)
})
在测试中:
beforeEach(function() {
cy.fixture('selectors').as('selectorsJson');
})
it('Description', function() {
cy.visit('/some-url');
cy.get("someSelectorAlias", {selectors: this.selectorsJson}).contains('Some text').click()
});
** 还有一个更简单的解决方案(没有 get 覆盖):**
beforeEach(function() {
cy.fixture('selectors').as('selectors');
})
it('Some tests', function() {
cy.visit('/someurl');
cy.get(this.selectors.someKey).should('be.visible').contains('SomeText')
})