LoginSignup
3
2

More than 5 years have passed since last update.

[TestCafe]ページモデルを使用してみる

Posted at

自動化を実装していると、同じ要素を何度も操作したり、
同じ期待値が何度も出てきたり、というのはよくあることだと思います。

なので、その都度要素を指定しているとあとあと面倒になってきます。
何らかの修正が入り、要素の id や class が変わったりすると、
それに合わせてテストコードを修正するのは正直面倒です。

メンテナンスに工数が掛かる為、下手したらいらない子になってしまいます。
テスト規模が大きければ尚更ですね。

なので、要素は要素、操作は操作のクラスを作っておくと、
要素変更に合わせた修正は要素のファイルのみでよくなります。

以下は、TestCafe のチュートリアル画面から必要な要素のみを纏めたものになります。

page_object.js
import { Selector } from 'testcafe';

export default class page {
    constructor () {

    /* -------------------------- */
    /* 入力画面                    */
    /* -------------------------- */
        // 画面タイトル
        this.pageTitle      = Selector('h1').withText('Example');

        // 名前インプットボックス
        this.boxNameInput   = Selector('#developer-name');

        // ボタン:submit
        this.buttonSubmit  = Selector('#submit-button');

    /* -------------------------- */
    /* 出力画面                   */
    /* -------------------------- */
        // 出力文字列
        this.outputText    = Selector('#article-header');

    }
}

この要素を使用して、操作するクラスを作ります。
画面タイトルを確認し、名前を入力してsubmitボタンを押して、
遷移先の表示を確認します。

operation.js
// ここで先程のオブジェクトクラスを指定しています
import PageObject   from './page_object';


const page   = new PageObject();

// ついでに期待値もここで指定してしまいます
const title  = 'Example';
const myname = 't_y_cafe';


fixture('Getting Started').page('http://devexpress.github.io/testcafe/example');
test('My second test', async t => {
    await t

        // 画面のタイトルを確認
        .expect(page.pageTitle.textContent).eql(title)

        // 名前を入力
        .typeText(page.boxNameInput,myname)

        // 登録する
        .click(page.buttonSubmit)

        // 画面出力確認
        .expect(page.outputText.textContent).eql('Thank you, '+ myname + '!');
});

今回は、要素の一部をページオブジェクトパターンとして1クラスに纏めてみましたが、
画面が増えていってもやはりこの手法は有用だと思います。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2