有没有办法强制赛普拉斯在同一个标​​签而不是另一个标签中打开

Posted

技术标签:

【中文标题】有没有办法强制赛普拉斯在同一个标​​签而不是另一个标签中打开【英文标题】:Is there a way to force cypress to open in same tab instead of another tab 【发布时间】:2020-10-12 11:21:24 【问题描述】:

我知道赛普拉斯的权衡之一是在多个选项卡上进行测试。但是,我们的网站默认打开另一个选项卡。我可以强制赛普拉斯在同一个选项卡上打开以继续我的测试吗? 我在下面有这段代码,但仍会打开一个新标签:

cy.get(element).invoke('attr', 'target', ' _self').click()

我记得在某个可以完成的地方找到它,但我凌晨 1 点的大脑无法通过谷歌搜索找到它。 我还在赛普拉斯文档中找到了这一点,但它可能与我的案例无关,因为我需要在通过 SSO 登录的新页面上执行多个断言: https://docs.cypress.io/api/commands/invoke.html#Function-with-Arguments

【问题讨论】:

【参考方案1】:

这对我有用:

cy.get(element).invoke('removeAttr', 'target').click()

【讨论】:

这对我有用,谢谢!【参考方案2】:

我会尝试从 yielded 主题和 cy.visit() 调用 href attr(这意味着 cypress 在同一个应用选项卡中打开它),例如:

cy.get(element).invoke('attr', 'href').then(myLink => 
    cy.visit(myLink);
)

【讨论】:

这在同一个选项卡上打开时有效。不幸的是,即使它通过 SSO(赛普拉斯接受)重定向,它也不是同一个超级域,但在这种情况下不起作用——我想我会单独处理。【参考方案3】:

你也可以使用

describe('describe', () => 
  let myLink: string

  it('Get response body', () => 
    cy.intercept('https://prod.cypress.io/users').as('users')
    cy.get(element).click().wait('@users')
      .then(res => 
        myLink = res.response.body.url
      )
  )

  it('Go to myLink', () => 
    cy.visit(myLink)
  )
)

【讨论】:

以上是关于有没有办法强制赛普拉斯在同一个标​​签而不是另一个标签中打开的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法断言赛普拉斯没有调用路由?

如何期望日期包含赛普拉斯中的另一个日期?

赛普拉斯:只运行一项测试

赛普拉斯:测试元素是不是不存在

赛普拉斯:拦截一条不存在的路线

赛普拉斯:我们如何在赛普拉斯中使用不记名令牌编写 GET 请求?