当我在
cy.xpath()
中使用 cy.origin()
命令时,它不起作用。
it('t1', function() {
cy.origin(('BaseUrl'), () => {
cy.visit('/profile')
cy.xpath("//input[@name='username']").type('user')
cy.xpath("//input[@name='password']").type('pass')
cy.xpath("//button[@type='button']").click()
})
})
错误:
类型错误
cy.xpath 不是函数
在
cy.origin()
之外也能正常工作
TLDR: 坚持使用
cy.origin()
内的标准赛普拉斯命令。
这是
cy.orgin()
的当前限制,实际上任何自定义命令都必须特殊对待,而cy.xpath()
是自定义命令。
请参阅回拨限制
目前还无法在回调中使用 require() 或动态 import()。由于此限制,它无法在回调中使用 npm 包或其他第三方库,因为没有引用它们的机制。 此功能将在 Cypress 的未来版本中提供。
虽然第三方包严格不可用,但可以在 cy.origin() 回调之间重用您自己的代码。解决方法是在 before 块的次要原点内创建自定义 Cypress 命令:
before(() => {
cy.origin('somesite.com', () => {
Cypress.Commands.add('clickLink', (label) => {
cy.get('a').contains(label).click()
})
})
})
it('clicks the secondary origin link', () => {
cy.origin('somesite.com', () => {
cy.visit('/page')
cy.clickLink('Click Me')
})
})
但是您不能将此模式与
cy.xpath()
一起使用,因为您当前需要 require('cypress-xpath')
并且无法在 cy.origin()
内完成。
解决方法
导航至
/node_modules/cypress-xpath/src/index.js
复制全部内容
添加新的命令文件支持:
/cypress/support/xpath.js
将此添加到文件中,粘贴复制的代码
before(() => {
cy.origin('somesite.com', () => { // your cross-origin URL here
// paste here code from /node_modules/cypress-xpath/src/index.js
})
})
将
xpath.js
导入 /cypress/support/commands.js
现在
cy.xpath()
将在您的任何测试中的 cy.orgin()
内工作。
检查非 xpath 是否有效。
cy.origin(('BaseUrl'), () => {
cy.visit('/profile')
cy.get("input[@name='username']").type('user')
...
如果没有,您可能没有正确设置
experimentalSessionAndOrigin
标志。
现在有 Cypress.require() 允许在
cy.origin()
中使用自定义命令和查询。
允许利用Cypress.require
回调函数中的依赖关系。它用于 require 诸如 npm 包和其他本地文件之类的模块。cy.origin()
请注意,
cy.xpath()
已被删除,因为它已过时,因为已经建议 CSS 选择器是 Cypress 中查询的更简单、更好的选项。