我正在写CY测试,我试着自己解决了几个小时,但没有成功。你能帮我一下吗?(
每次运行测试时,我都会得到新的URL,例如
https://website.com/en/info/is/here/
我只需要保存
/en/info/is/here/(因此没有域名(
我需要稍后将其与另一个href进行比较。
你能告诉我怎么做吗?或者至少告诉我方向吗?非常感谢!
cy.location((命令为您提供命名零件,因此在示例中,pathname
是您需要的零件
cy.visit('http://localhost:8000/app/index.html?q=dan#/users/123/edit')
cy.location().should((loc) => {
..
cy.wrap(loc.pathname).as('url1')
...
})
如果你有搜索或散列以及
cy.visit('http://localhost:8000/app/index.html?q=dan#/users/123/edit')
cy.location().should((loc) => {
..
cy.wrap(loc.pathname + loc.search + loc.hash).as('url1')
...
})
您可以在URL字符串上使用.split()
。
保存位置取决于它的使用位置。
内部一个测试:
let pathname
cy.url().then((url) => url.split('/').slice(3)).as('pathname1')
...
cy.get('@pathname1').then(pathname1 => {
expect(pathname1).to.eq(pathname2)
})
测试之间:
let pathname1
it('gets first pathname', () => {
cy.url().then((url) => pathname1 = url.split('/').slice(3))
})
it('uses first pathname', () => {
expect(pathname1).to.eq(pathname2)
})
使用URL接口解析字符串(也由cy.location使用(
const urlString = 'https://website.com/en/info/is/here/'
const url = new URL(urlString)
const pathname = url.pathname // yields "/en/info/is/here/"
您可以使用以下内容:
let firstUrl = null;
let secondUrl = null;
cy.url().then(url => {
firstUrl = url;
});
/* sometimes later */
cy.url().then(url => {
secondUrl = url;
});
/* sometimes later */
expect(firstUrl).to.equal(secondUrl)
如果你只想比较这些URL的某些部分,我建议你使用正则表达式。
您可以使用javascriptsplit
来执行此操作:
let partUrl
cy.url().then((url) => {
partUrl = url.split('com')[1] //saves /en/info/is/here/
})
您可以使用.replace()
和Cypress baseUrl值,然后将该值存储在Cypress环境变量中。
cy.url().then((url) => {
Cypress.env('someUrl', url.replace(Cypress.config('baseUrl'), '');
}).then(() => {
cy.log(Cypress.env('someUrl'));
})