我正尝试在Cypress上执行此测试:
1.获取当前页面的URL参数/查询,例如:本地主机:3000/?重定向链接= X
1.单击当前页面内的跳过按钮
1.重定向到另一个页面(这是一个页面,而不是组件,所以它是外部/跨域)
1.位置应等于X
但是第4步的Assert失败了,我想测试一下新的重定向页面是否与查询字符串参数中传递的相同。
我在做:
beforeEach(() => {
cy.visit('/?redirect_link=X')
})
it('it skips and then redirects to another page', () => {
cy.location().then((local) => {
const arr = local.search.split('?')[1].split('&')
const paramObj = {} as any
arr.forEach((param) => {
const [key, value] = param.split('=')
if (key === 'redirect_link') {
paramObj[key] = value
cy.wrap(paramObj.redirect_link).as('redirect_link')
}
})
})
cy.get('[data-testid="button"]').click()
cy.get('@redirect_link').then((redirect_link: string) => {
cy.location('href').should('eq', '{PAGE X HERE}')
})
})
在cypress中,这个"should"比预期执行得更早:
location
wrap redirect link
get button
click
location href
expected 'LOCALHOST' to equal PAGE X
如果我在location中输入wait(10000)或timeout,那么在加载PAGE X之后,它会在执行wait时在location href阶段将LOCALHOST的值更改为null,加载之后失败:* * AssertPAGE X预期为空**
我还尝试使用:
cy.url().then(() => ) // same return since it's same to cy location href
cy.on('window:load') // returns null when try to get the url
cy.on('url:changed) // returns null when try to get the url
尝试在测试中的所有内容中设置超时,然后在点击后,但仍然不起作用。
编辑:
当我这样做:
一个三个三个一个
由于它是跨域的,我还尝试在窗口更改时放置一个事件侦听器,但它没有在任何字段中显示PAGE X链接(路径:空,目标位置空)
cy.on('window:before:unload', (e) => {
console.log(e)
})
// doesn't return any page X link
1条答案
按热度按时间vdzxcuhz1#
由于重定向是到一个跨域的位置,你 * 必须 * 使用
cy.origin()
Package 器来Assert关于新域的任何内容。问题是新的域必须是硬编码的,它不能像您在测试的顶部尝试做的那样从旧的域参数计算出来。
比如说这个
然后,您可以单独测试位置参数,而无需执行重定向,如下所示