如何从文件访问预定义的 URL

How to visit pre-defined URLs from file

如果我有 30 页要检查,例如,EN 有免责声明,但其他 29 种语言没有,最好的方法是什么?例如,现在我是这样的:

const urls = ['http://google.com/en',
  'http://google.com/bg'
]

describe('Disclaimer check', () => {
  urls.forEach((url) => {
    it(`Checks disclaimer text ${url}`, () => {
      cy.visit(url)
      cy.get('.Disclaimer').should('be.visible')
        .and('contain', 'This is disclaimer.')
    })
  })
})

对于 2 个站点,可以用相同的代码定义它们,但检查是否存在免责声明的其他文件将有 29 个不同的 URL-s。这里的最佳做法是什么?一个想法是将所有测试分开,但这意味着对每个功能进行 30 次测试,这听起来不太好。

由于 url 我正在使用其中的许多不同的值,因此使用 baseurl 使其变短似乎也不适合。

提前致谢!

将所有数据添加到一个数据对象,导入该数据对象,然后使用 Cypress Lodash 迭代多次应该可以实现您的目标。

// data.js
// defining data
export const data =[{
  "url": "www.google.com",
  "hasDisclaimer": true
}, {
  "url": "www.other-url.com",
  "hasDisclaimer": false
}...
]

然后您可以包装返回的数组并在 Cypress 链中使用它。

import { data } from './path/to/data'

describe('Tests', () => {
  Cypress._.times(data.length, (index) => {
    const curr = data[index];
    it(`Checks disclaimer text ${curr.url}`, () => {
      cy.visit(curr.url).then(() => {
        if (curr.hasDisclaimer) {
          cy.get('.Disclaimer').should('be.visible')
          .and('contain', 'This is disclaimer.');
        } else {
          // code for checking disclaimer does not exist
        }
      });
    });
  });
});

在您的 Fixtures 文件夹下创建一个 urls.json 文件,如下所示:

[
    "https://google.com/en",
    "https://google.com/bg",
    "https://url3.com",
    "https://url4.com"
]

现在假设您知道哪些 URL 没有免责声明,您可以简单地将它们添加到 If 条件中并应用 not.exist 断言。

import urls from '../fixtures/urls.json'

describe('Disclaimer check', () => {
  urls.forEach((url) => {
    it(`Checks disclaimer text ${url}`, () => {
      cy.visit(url)
      if (url == 'https://google.com/en' || url == 'https://url3.com') {
        //Check for URL's where disclaimer doesn't exist
        cy.get('.Disclaimer').should('not.exist')
      } else {
        //Check for URL's where disclaimer exists
        cy.get('.Disclaimer')
          .should('be.visible')
          .and('contain', 'This is disclaimer.')
      }
    })
  })
})

你走在正确的道路上。这将是使用 cypress-each 的一个很好的例子。 Cypress-each 将 运行 所有测试,无论一个或多个测试是否失败。根据需要多长时间,您可能希望将 it.each 测试分解到另一个文件中。

import 'cypress-each' // can included in /support/index.js

describe('Disclaimer check', () => {

  // baseUrl: http://google.com
  const noDisclaimerUrl = [
    '/bg',
    // all other languages
  ]

  it('/en does have disclaimer text', () => {
    cy.visit('/en')
    // test code
  }) 

  it.each((noDisclaimerUrl)
     `%s does not have disclaimer text`
     (url) => {
       cy.visit(url)
       // test code
  })
})