添加自定义命令,该命令返回字符串,打字稿

时间:2019-10-16 20:32:15

标签: typescript ui-automation cypress

我是柏树的新人,我正在尝试用打字稿学习柏树。

尝试添加自定义命令时遇到问题。

Cypress.Commands.add('getEnvURL', (environment) => {

    if(environment === ('Dev')){

        return 'testURL';
    } else if (environment === ('Stagging')){        
        return 'StaggingURL';
    }
});


declare global {
    namespace Cypress {
      // tslint:disable-next-line:interface-name
      interface Chainable<Subject> {
        getEnvURL(environment: string): string;        
      }
    }
  }

规格文件

it('Login Test', () => {
cy.visit(cy.getEnvURL(Cypress.env('environment')));
 });

当我尝试从规格文件中调用getEnvURL()自定义方法时,我期望它会返回URL字符串。当我运行测试时,它什么也没做。

有人可以帮我解决这个问题吗

2 个答案:

答案 0 :(得分:1)

问题应该出在您的代码行上。

cy.visit(cy.getEnvURL(Cypress.env('environment')))

cy.getEnvURL返回一个对象,而不是返回值'testURL'或'StaggingURL'。

您可以尝试使用此代码吗?

cy.getEnvURL(Cypress.env('username')).then(($url) => {
        cy.visit($url)
    })

答案 1 :(得分:1)

说到cy命令或自定义命令,它们总是异步返回结果。您只能在 then 块中使用实际结果数据。 https://docs.cypress.io/guides/core-concepts/introduction-to-cypress.html#Subject-Management


我认为,cy命令不是您所需要的。我希望变量 environment 会在您的应用启动之前设置,并且不会在运行时更改。如果是这样,您只需要创建一个简单的模块 test-utils.ts 或任何位于 cypress / utils 下的东西。

export const getEnvUrl = (env: string) => {
  const env = Cypress.env('environment')
  if (env === 'staging') {
    return 'staging-url'
  } else {
    return 'test-url'
  }
}

在柏树测试中,您可以直接使用

cy.visit(getEnvUrl())