web-dev-qa-db-ja.com

サイプレス:カスタムコマンドから戻り値を取得する方法? (サイプレスプロミス)

カスタムサイプレスコマンドによって返された戻り値を取得する方法を探しています。

私は現在サイプレスとサイプレス-プロミスlib( https://www.npmjs.com/package/cypress-promise )を使用しています

現在、結果は次のとおりです。log1= CAR 1 log2 = null

私の間違いはどこですか?

テストファイル:

it('Test 1', async function() {
     const carName = await promisify(cy.set_typeCarName());
     cy.log("log2 = " + carName );
});

モジュール:

set_typeCarName() {
     let carName = "CAR 1";
     cy.get('#newSiteCityInput').type(carName);
     cy.log("log1 = " + carName);
     return carName;
};

Cypress.Commands.add('set_typeCarName',() => {
    webnewsite.set_typeCarName();
});
3
wawanopoulos

コマンドにreturnステートメントがありませんか?

Cypress.Commands.add('set_typeCarName',() => {
  return webnewsite.set_typeCarName(); // I added the initial `return`
});
0
NoriSte

サイプレスは、値を返す代わりに、つまりエイリアスを使用して、コードを記述する新しい方法を導入しています。 https://docs.cypress.io/guides/core-concepts/variables-and-aliases.html#Closures

コードを書く通常の方法

async function compute(){
const value = await (asynchronous function);
return value;
}

const x = await compute(); // #a
console.log(x);            // #b

サイプレスではasync/awaitを使用できないため、これを行う方法はサイプレスです。

function() compute{
  cy.get('p#text').then(p => {
    const text = p.textContent;
    cy.wrap(text).as('pText');
    //even if we return text from here, it will not be accessible anywhere

  });
}

compute();    // #a
cy.get('@pText').then(text => {
  console.log(text);  // #b
}

重要なのは、値にエイリアスを設定し、次のコマンドで使用することです

なぜなら

サイプレスは最初にコード全体を実行し、コマンドをキューに入れます
コードがキューに入ると、キューの次のコマンドは、現在のコマンドのすべてのコールバックが完了した後にのみ実行されるため、上記のコードパターンを使用できます。

0