0

BDD 自動化フレームワークでは、Cypress Cucumber プリプロセッサ ライブラリを使用しています。以下の場合の一般的なステップ定義を作成する予定です。から以下のケースを処理する単一のステップ定義を持つことは可能ですかa to d。現在、2 つのステップの定義でケースを処理することを計画しています。より一般的なものにすることはできますか。つまり、すべてを 1 つのステップの定義にすることはできますか?

a) Then I "should not" see the value "Some_Value" in the "Reports_Logs" table 
b) Then I "should" see the value "Some_Value" in the "Reports_Logs" table

c) Then I "should not" see the value in the "Users_Main" table ( in this case, I will read the value from the local storage )
d) Then I "should" see the value in the "Users_Main" table ( in this case, I will read the value from the local storage )

step defintion:

/* この汎用関数は、内部のすべてのテーブル td 値アサーションを検証するために使用されます */

Then('I {string} see the value {string} in the {string} table', (checkCase, value, tableDatacy) => {
  if(checkCase === "should"){
    cy.get(`[data-cy=${tableDatacy}]`).find('tbody').find('tr').each(($tr) => {
      cy.wrap($tr).find('td').each(($td) => {
        const textName = Cypress.$($td).text();
        switch (value) {
          case textName.trim():
            console.log("Condition got matched ...!!! " + textName.trim());
            cy.wrap($tr).find('td').contains(textName.trim()).should('be.visible');
            break;
        }
      });
    });
  } else if (checkCase === "should not") {
     // rest of the check with this condition..
  }
});
4

2 に答える 2

0

ステップ C と D は値をチェックする必要があり、A と B と同様に、そこにあるべき値と存在すべきでない値を正確に指定すると、読者にとってより意味のあるものになります。

したがって、手順 C と D を次のように書き直すと、次のようになります。

c) 次に、「Users_Main」テーブルに値「Some_Value」が表示される「べきではない」
d) 次に、「Users_Main」テーブルに値「Some_Value」が表示される「べき」

次に、ステップ定義を変更して、「Users_Main」テーブルをチェックし、ローカル ストレージから読み取ることができるようにする必要があります。

このようにして、1つのステップだけで、言及した4つのステップすべてをカバーでき、ステップを定義するより良い方法です。どの値が存在する必要があるか、または存在しないかを正確に確認できるからです。

于 2021-07-29T08:54:33.343 に答える
0

ステップにあるコードは改善できます。

Should調子

cy.get(`[data-cy="${tableId}"] tbody td`)
  .filter(`:contains(${value})`)
  .should('be.visible')
  .log(`Success: "${value}" is in the table`)

Should not調子

cy.get(`[data-cy="${tableId}"] tbody td`).then($cells => {
  const $matchingCells = $cells.filter(`:contains(${value})`)
  if ($matchingCells.length) {
    throw `Failed: "${value}" is in the table but should not be`
  } else {
    cy.log(`Success: "${value}" is not in the table`)
  }
})
于 2021-07-29T10:46:17.923 に答える