赛普拉斯(Cypress),否则/ switch案例不起作用

时间:2018-10-05 11:54:55

标签: javascript cypress

我正在尝试在测试中添加其他if / switch case,但是 否则-仅当情况发生时,如果“如果”失败,则不进入其他情况,如果 它也发生在开关盒中。 module.exports.selectEnviroment = function(env){

switch (env) {
case 'alpha':
  cy.get('[role="presentation"]')
    .find('[href="#/company-detail/5bb3765e64f66ca0027e15245"]')
    .click();
  break;
case 'beta':
  cy.get('[role="presentation"]')
    .find('[ng-href="#/company-detail/5bb62c019ee36000273a6e2b"]')
    .eq(0)
    .click();
  break;

}

 it('Booking should be done using invoice', () => {
    cy.visit(`${blah_URL}#/xyz/`);
    let env = blah.split('.')[1];
    selectEnviroment(env);

根据环境,它应该选择大小写,但不是

    if (
    cy.get('[role="presentation"]').find('[ng-href="#/company-detail/5bb62c019ee36000273a6e2b"]') ) {
    cy.get('[role="presentation"]')
      .find('[ng-href="#/company-detail/5bb62c019ee36000273a6e2b"]')
      .eq(0)
      .click();
  } //alpha
  else if (cy.get('[role="presentation"]').find('[ng-href="#/company-detail/5bae05a39af4a90027fcdf43"]')) {
    cy.get('[role="presentation"]')
      .find('[ng-href="#/company-detail/5bae05a39af4a90027fcdf43"]')
      .eq(0)
      .click();
  } //QA
  else if (cy.get('[role="presentation"]').find('[ng-href="#/company-detail/5b855022323d37000f48bcdc"]')) {
    cy.get('[role="presentation"]')
      .find('[ng-href="#/company-detail/5b855022323d37000f48bcdc"]')
      .eq(0)
      .click();
  } //Gamma
  else if (cy.get('[role="presentation"]').find('[ng-href="#/company-detail/5bb62ccf5cb043002737d929"]')
  ) {
    cy.get('[role="presentation"]')
      .find('[ng-href="#/company-detail/5bb62ccf5cb043002737d929"]')
      .eq(0)
      .click();
  }

it('flight booking should be done using new credit card', () => {
cy.visit(`${COCKPIT_URL}#/company-list/`);
selectEnviroment();

failure message

3 个答案:

答案 0 :(得分:0)

您正在使用赛普拉斯命令,希望它们立即产生结果。这不是赛普拉斯的工作方式。调用赛普拉斯功能只是让赛普拉斯向其命令列表添加命令以最终运行的一种方法。

.then()是在考虑这种情况的情况下创建的。它允许您添加一些代码,使其直接在链中的上一个命令之后运行:

cy.get('.myDiv').then(elem => {
    // elem is a jQuery object
    console.log(elem.text());
    if (elem.text() == 'Some text') {
        // do something
    else {
        // ...
    }
}

我强烈建议reading the introduction to Cypress in the docs。它写得很好并且易于阅读。赛普拉斯与其他测试框架不同,要编写好的赛普拉斯代码,必须对赛普拉斯的工作原理有基本的了解。

答案 1 :(得分:0)

它可能无关,但是要在环境之间切换,请执行以下步骤

1.在Cypress/plugin/index.js中,添加以下代码

const envConfig = require('../support/config');

/* eslint-disable no-param-reassign */
module.exports = (on, config) => {
  config.baseUrl = envConfig(config.env.APP_ENV).baseUrl;

  return config;
}
  1. cypress/support下,创建一个名为"config.js"的文件,并添加以下代码

    `const config = {     产品:{       baseUrl:“ https://......./data”     },     质量检查:{       baseUrl:“ https://...../data”     },     开发人员:{       baseUrl:“ http://localhost:8080”     } }

    module.exports =     typeof赛普拉斯!=='undefined'       ? config [Cypress.env('APP_ENV')]       :env => config [env];`

  2. cypress/commands下,使用此方法登录

    Cypress.Commands.add('login', (username, password) => { cy.visit(Cypress.config('baseUrl')) cy.url().then(url => { if ( url.indexOf('authorization.oauth2') !== -1 || url.indexOf('auth-corp-aws') !== -1 ) { cy.get('#username').type(Cypress.env('auth_username')) cy.get('#password').type(Cypress.env('auth_password'), { log: false }) cy.get('.ping-button.normal.allow').click() cy.wait(1000) } }) })

  3. 使用此命令在不同的环境中运行测试:

    "cy:e2e:qa_env": "CYPRESS_APP_ENV=qa cypress run --headed --browser chrome", "cy:e2e:dev_env": "CYPRESS_APP_ENV=dev cypress run --headed --browser chrome", "cy:e2e:prod_env": "CYPRESS_APP_ENV=prod cypress run --headed --browser chrome",

答案 2 :(得分:0)

it('does something different based on the class of the button', () => {
  // RERUN THIS TEST OVER AND OVER AGAIN
  // AND IT WILL SOMETIMES BE TRUE, AND
 // SOMETIMES BE FALSE.

cy.get('button').then(($btn) => {
   if ($btn.hasClass('active')) {
   // do something if it's active
   } else {
   // do something else
   }
 })
})

例如,如果您的元素有任何随机文本,例如有时是Initiated,有时是Completed,则可以这样:

cy.get('.value-text').then($el => {
        // $el is a jQuery object
        console.log($el.text());
        if ($el.text() == 'Initiated') {
 
            cy.get('.edit_status > #cg-icon').click()
        } else {
             // Here You can click on another element.
        }
    })