如何从文件访问预定义的 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
})
})
如果我有 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
})
})