在 cy.origin() 中使用自定义命令时出错

问题描述 投票:0回答:3

当我在

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()

之外也能正常工作
cypress element xpath-2.0 cypress-custom-commands cypress-origin
3个回答
2
投票

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()
内完成。


解决方法

  1. 导航至

    /node_modules/cypress-xpath/src/index.js

  2. 复制全部内容

  3. 添加新的命令文件支持:

    /cypress/support/xpath.js

  4. 将此添加到文件中,粘贴复制的代码

    before(() => {
      cy.origin('somesite.com', () => {  // your cross-origin URL here
    
         // paste here code from /node_modules/cypress-xpath/src/index.js
    
      })
    })
    
  5. xpath.js
    导入
    /cypress/support/commands.js

现在

cy.xpath()
将在您的任何测试中的
cy.orgin()
内工作。


1
投票

检查非 xpath 是否有效。

cy.origin(('BaseUrl'), () => {
  cy.visit('/profile')
  cy.get("input[@name='username']").type('user')
  ...

如果没有,您可能没有正确设置

experimentalSessionAndOrigin
标志。


1
投票

现在有 Cypress.require() 允许在

cy.origin()
中使用自定义命令和查询。

Cypress.require
允许利用
cy.origin()
回调函数中的依赖关系。它用于 require 诸如 npm 包和其他本地文件之类的模块。

请注意,

cy.xpath()
已被删除,因为它已过时,因为已经建议 CSS 选择器是 Cypress 中查询的更简单、更好的选项。

© www.soinside.com 2019 - 2024. All rights reserved.