如何在Cypress中只保存部分URL(没有域名)



我正在写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'));
})

相关内容

  • 没有找到相关文章

最新更新