赛普拉斯如何处理没有“目标”和“href”属性的新标签?
Posted
技术标签:
【中文标题】赛普拉斯如何处理没有“目标”和“href”属性的新标签?【英文标题】:Cypress how to handle new tab without "target" and "href" attribute? 【发布时间】:2021-12-24 18:50:21 【问题描述】:注意: Cypress 是一个很好的自动化工具。我是赛普拉斯世界的新手。我真的很喜欢我们如何在同一行代码上采取行动和做出断言的方式。 但是,我遇到了一个难题,我无法处理。我确信这是通过某种方式处理的,但是经过 2 天的研究(大约 6 小时),我的精力已经耗尽。
说明: 我正在尝试(学习使用赛普拉斯)自动化this 示例。我无法自动化(按钮)“新标签”功能。我不想考虑如何解决这个“任务”以及如何自动化其他两个(按钮)“新窗口”和“新窗口消息”功能。这是 html 文档的屏幕截图:
我的代码: 我尝试使用this 主题的第一个答案来解决这个问题。
/// <reference types="cypress" />
describe('Example shows how to work with browser windows.', () =>
it('Example shows how to work witn button that opens new tab without "target: _blank" and "href" attributes.', () =>
cy.visit('https://demoqa.com/browser-windows')
cy.window().then(win =>
cy.stub(win, 'open').as('open')
)
cy.xpath('//*[@id="tabButton"]').click()
cy.get('@open').should('have.been.calledOnceWithExactly', '/sample')
)
)
我不确定我错过了什么。
【问题讨论】:
【参考方案1】:您的示例未遵循您提供的链接代码。我已经重构了您的代码,经过测试并且可以正常工作:
/// <reference types="cypress" />
describe('Example shows how to work with browser windows.', () =>
it('Example shows how to work witn button that opens new tab without "target: _blank" and "href" attributes.', () =>
cy.visit('https://demoqa.com/browser-windows',
onBeforeLoad(win)
cy.stub(win, 'open')
);
cy.get('#tabButton').click();
cy.window().its('open').should('be.called');
cy.get('#windowButton').click();
cy.window().its('open').should('be.called');
cy.get('#msgWindowButtonWrapper').click();
cy.window().its('open').should('be.called');
);
);
结果:
【讨论】:
代码正在运行。谢谢。但我仍然无法得到它。新标签页中的页面无法打开。 不,它不会打开。故意不支持通过赛普拉斯访问新窗口。你可以在这里阅读更多信息:docs.cypress.io/guides/references/trade-offs#Multiple-tabs 是的,我知道。但我在想(不知何故)我们可以在同一个浏览器选项卡中打开新链接。 好吧,您可以通过添加cy.visit()
方法来访问上次断言后的页面,如下所示:cy.visit('https://demoqa.com/sample');
除此之外,不支持。
哦,好吧...我尝试添加属性“target=_self”,但没有失败 - 添加了属性,但在新选项卡中再次打开了链接。好的,现在可以关闭主题了。以上是关于赛普拉斯如何处理没有“目标”和“href”属性的新标签?的主要内容,如果未能解决你的问题,请参考以下文章