如何从 Cypress 环境变量中获取一组 URL,然后遍历它们并 运行 分别对每个 URL 进行测试?
How can I get an array of URLs from the Cypress environment variable and then loop over them and run the tests for each one individually?
在我的 cypress.json 文件中有以下内容
{
"env":{
"urls":["https://somedomain/index.html","https://someotherdomain/index.html"]
}
}
然后在我的 spec.js 文件中
describe('Test', () => {
Cypress.env('urls').forEach(url => {
before(() => {
cy.visit(url)
})
describe(`Current file: ${url}`, () => {
it('Contains Header Element', () => {
cy.get('header')
})
it('Contains Main Element', () => {
cy.get('main')
})
})
})
})
我想要发生的是从 env.urls 获取第一个 url 并针对它运行所有测试,然后获取第二个 url 并针对它运行所有测试.相反,它首先访问 urls(这确实有意义,因为它在 before 块中)然后 运行 之后的测试。构建这个的正确方法是什么?
顺便说一句,最初我试图将 env.urls 数组放入一个 .json 文件中并使用 cy.readFile() 检索它,然后循环遍历内容,但我不能'完全不知道如何使它工作,因为它希望 cy.readFile() 在测试中。
before
块需要在 describe
块内。休息一切看起来都很好。
Cypress.env('urls').forEach((url) => {
describe(`Test for ${url}`, () => {
before(() => {
cy.visit(url)
})
it('Contains Header Element', () => {
cy.get('header')
})
it('Contains Main Element', () => {
cy.get('main')
})
})
})
要读取 URL 或测试之外的任何数据,请使用 require()
。
为了解释这个问题,赛普拉斯将连续的 before()
个挂钩合并到同一个块中,但在它们之间引入上下文块阻止了它。
const urls = require('../fixtures/urls.json') // alternative to cy.readFile()
// data is read at test loading time
// instead of during the test
describe('Test', () => {
urls.forEach(url => {
describe(`Current file: ${url}`, () => { // multiple blocks define here
// one for each url
before(() => {
cy.visit(url)
})
it('Contains Header Element', () => {
...
})
it('Contains Main Element', () => {
...
})
})
})
})
在我的 cypress.json 文件中有以下内容
{
"env":{
"urls":["https://somedomain/index.html","https://someotherdomain/index.html"]
}
}
然后在我的 spec.js 文件中
describe('Test', () => {
Cypress.env('urls').forEach(url => {
before(() => {
cy.visit(url)
})
describe(`Current file: ${url}`, () => {
it('Contains Header Element', () => {
cy.get('header')
})
it('Contains Main Element', () => {
cy.get('main')
})
})
})
})
我想要发生的是从 env.urls 获取第一个 url 并针对它运行所有测试,然后获取第二个 url 并针对它运行所有测试.相反,它首先访问 urls(这确实有意义,因为它在 before 块中)然后 运行 之后的测试。构建这个的正确方法是什么?
顺便说一句,最初我试图将 env.urls 数组放入一个 .json 文件中并使用 cy.readFile() 检索它,然后循环遍历内容,但我不能'完全不知道如何使它工作,因为它希望 cy.readFile() 在测试中。
before
块需要在 describe
块内。休息一切看起来都很好。
Cypress.env('urls').forEach((url) => {
describe(`Test for ${url}`, () => {
before(() => {
cy.visit(url)
})
it('Contains Header Element', () => {
cy.get('header')
})
it('Contains Main Element', () => {
cy.get('main')
})
})
})
要读取 URL 或测试之外的任何数据,请使用 require()
。
为了解释这个问题,赛普拉斯将连续的 before()
个挂钩合并到同一个块中,但在它们之间引入上下文块阻止了它。
const urls = require('../fixtures/urls.json') // alternative to cy.readFile()
// data is read at test loading time
// instead of during the test
describe('Test', () => {
urls.forEach(url => {
describe(`Current file: ${url}`, () => { // multiple blocks define here
// one for each url
before(() => {
cy.visit(url)
})
it('Contains Header Element', () => {
...
})
it('Contains Main Element', () => {
...
})
})
})
})