自定义 Cypress 命令不返回预期值

Custom Cypress command doesn't return the expected value

提问人:marelmar 提问时间:11/17/2023 更新时间:11/18/2023 访问量:32

问:

我正在编写以下自定义 Cypress 命令,以便在我的 html 页面中获取元素的值。这个想法是这样做的:

MyCompanyAPI.API.Fields.getById('main').value

什么 ist 斋戒和

window.document.getElementById().value

但是我需要在赛普拉斯命令中使用第一个选项。所以我做了这样的事情:

Cypress.Commands.add('getValue', (id) => {

cy.window().then((win) => {
    const myCompanyAPI = win.MyCompanyAPI;
    if (!hybridForms) {
      cy.log('MyCompanyAPI object not found in window.');
      return cy.wrap(undefined);
    }
  
    return cy.wrap(myCompanyAPI.API.Fields).invoke('getById', id).then((result) => {
      const value = result && result.value;
      cy.log(`Value for ${id}:`, value);
  
      if (value === undefined) {
        cy.log(`API call for ${id} returned undefined.`);
      }
  
      return cy.wrap(value);
    });
  });

});

胜利。MyCompanyAPI 和 myCompanyAPI.API.Fields 确实存在于 win 中。但是当我尝试在myCompanyAPI.API.Fields中调用函数getByID()时,结果只是:

命令:log index-a10e15b7.js:103972 消息:返回未定义 #main 的 API 调用。 index-a10e15b7.js:103972 参数:

我尝试过很多方法。其中一个像这样,为了 debbug:

Cypress.Commands.add('getValue', (id) => {

    cy.window().then((win) => {
        const hybridForms = win.HybridForms;
        if (!hybridForms) {
          cy.log('HybridForms object not found in window.');
          return cy.wrap(undefined);
        }
      
        const api = hybridForms.API;
        if (!api) {
          cy.log('API not found in HybridForms.');
          return cy.wrap(undefined);
        }
      
        const fields = api.Fields;
        if (!fields) {
          cy.log('Fields not found in API.');
          return cy.wrap(undefined);
        }
      
        const getById = fields.getById;
        if (!getById) {
          cy.log('getById not found in Fields.');
          return cy.wrap(undefined);
        }
      
        const value = getById(id);
        if (!value) {
          cy.log(`Value for ${id} is undefined.`);
          return cy.wrap(undefined);
        }
      
        const finalValue = value.value;
        cy.log(`Final value for ${id}:`, finalValue);
      
        return cy.wrap(finalValue);
      });
      
      
      
  });

但结果也包括:.Value for #main is undefined.

这里有人可以在这个问题上帮助我吗?

提前致谢!

我需要接收

MyCompanyAPI.API.Fields.getById('main').value

但是在赛普拉斯自定义命令中

JavaScript 柏树

评论


答:

0赞 adsy 11/18/2023 #1

看起来您可能正在将参数传递给,但它期望 since 不需要说明符。该选择器语法仅与 while 等方法相关,并且已经在寻找 ID,因此鉴别器不相关。"#main"getValue"main"getElementById#querySelectorgetElementById#

评论

0赞 marelmar 11/20/2023
这正是问题所在。@adsy,感谢帮助我看到这个“细节”。