簡體   English   中英

Cypress 自定義命令 - 中斷 .each() 循環並返回一個值以用於進一步的步驟

[英]Cypress Custom Command - Break from a .each() loop and return a value to be used in further steps

我是 Cypress 的新手 [3 天 :)]。 我正在創建一個自定義命令,它試圖在表中查找列的列索引。 我想返回列索引並將其存儲在一個變量中並在以后的步驟中使用它。

這是我嘗試過的:

    Cypress.Commands.add('get_table_column_index', (columnName) => {

  cy.getIframeBody().find('table').within(() => {
    cy.get('tr th[scope=col]').each((element, index) => {
      let colName = element.text();
      cy.log(index, colName);
      
      if(colName == columnName)
      {
        cy.wrap(index).as('index');
        return false;
      }
    });
  });
});

let columnIndex = cy.get_table_column_index('ColName').get('@index');
cy.log('index' + columnIndex);

索引是[對象對象]

有人可以指導我解決這個問題嗎? 我究竟做錯了什么?

我可以看到wrap返回正確的索引值,但我不確定如何提取和使用它。

========更新========

我試過這個,看起來它能夠記錄正確的值:

let columnIndex = 
cy.get_table_column_index(column_name).get('@index');
columnIndex.then(index => cy.log(index));

現在,我正在嘗試將其擴展為在下一步中使用索引值,如下所示:

Cypress.Commands.add('get_text', (row_num, column_name) => {
    
    let txt;
    cy.test_index(column_name).get('@index').then(index => {
        let element = cy.get('main > table').within(() => {
            cy.log('${index');
                        cy.get('tr:nth-child(${row_num}) td:nth-child(${index})');
        //txt = element.text();
        cy.log(txt);
        });
    });
    return txt;
  })

我無法弄清楚如何在cy.get('tr:nth-child(${row_num}) td:nth-child(${index})';表達式中使用indexrow_num的值。

Error: Syntax error, unrecognized expression: :nth-child

您需要做的就是改變您使用變量的方式。

 cy.log(this.index + columnIndex);

我能夠像這樣工作:

.get('@index').then(....

用於提取由我的方法get_table_column_index返回的索引值。

然后再次使用cy.wrap返回單元格值。

Cypress.Commands.add('get_text', (row_num, column_name) => {

cy.get_table_column_index(column_name).get('@index').then(index => {
    cy.get('main > table').within(() => {
     cy.get(`tr:nth-child(${row_num}) td:nth-child(${index})`)
        .invoke('text')
        .then((text) => {
            cy.log("Text = " + text);
            return cy.wrap(text).as('cell_value');
        })
    });
});

})

最后在我的方法調用中:

let cell_text = cy.get_text(2, 'Licensing').get('@cell_value');
cell_text.then(cell_value => {
    cy.log(cell_value);
    expect(cell_value).to.include('QTP');
})

我不能夠做的唯一一件事就是值存儲在一個變量,並使用它,而鏈接的任何命令狀then以提取其價值。

如果有人可以提供更多信息,那就太好了。

謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM