CodeceptJSで変数を扱う

たまには技術っぽい記事

最近仕事でCodeceptJSが使えないかと思って、試していたのですが、

クリックとかスクリーンショットとかは簡単にできたのですが、変化する値を使うことができるのかなということで調べてみてやってみた感じのメモです。

ちなみにCodeceptJSでは、最初に使うヘルパーを選べるのですが、自分は Playwright を使いました。

ここで用いている変数という名前が正しいのかわかりませんが、やりたいことは例えば、

登録画面で、登録ボタンを押すと「登録番号は1234567です。」と画面に表示される。

その「1234567」という番号を用いて、照会画面でデータが登録されていることを確認する。

といったようなケースです。

この登録番号は、登録ボタンを押す度に値が変わるため、テストケースを書くときには、1234567という固定値を使うことができません。

このような時には、画面に表示される「登録番号は1234567です。」のテキストから1234567を取得したいですよね。

で、CodeceptJSでもこういったことができるのかということを調べていたのですが、結果としてはできました。

grabTextFrom async を使います。

具体的には、公式サイトの Grabbing のところのように書きます。

Scenario('use page title', async (I) => {
  // ...
  const password = await I.grabTextFrom('#password');
  I.fillField('password', password);
});

のように書いてありますが、 await I.grabTextFrom('#password’); のところで、passwordの内容を変数に格納して、それを用いて検索しています。

ちなみに、const の場所は Scenario の外にもできるので外に置くことで、異なるシナリオでも使うことができます。

grab を使うところは、async も合わせて使わないと、値がうまく取れなかったです。

// 登録番号
let registrationNumber;

// 登録画面
Scenario('regist', async (I) => {
  // ...
  registrationNumber = await I.grabTextFrom('#registrationNumber');

});

// 照会画面
Scenario('inquiry', (I) => {
  // ...
  I.fillField('registrationNumber', registrationNumber);

});

雰囲気としては上記のような感じで動くはずです。

動作するコードは手元にないため、作ったら改めて共有しようと思います。

ちなみに、jsなので、正規表現とかも使えるのでmatchとかを使えば、「登録番号は○○です。」から「○○」を抜き出すといったようなこともできます。(こんな感じ

以上、動作する具体的なコードがないので、説明がふわっとしてしまいましたが、結構 CodeceptJS はいろいろなことが簡単にできるので、テストだけでなく、RPAっぽい使い方もできるのではないと思っています。

GitHubに動作するコード等をあげたら、追記するなりしようと思います。よろしくおねがいします。

おしまい。