首页 > 解决方案 > 使用同级调用时,覆盖 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()

标签: cypress

解决方案


找到了一种解决方法,但它需要在每个必需的测试中都有额外的逻辑。(在示例覆盖 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')
})


推荐阅读