1. ホーム
  2. angularjs

[解決済み] Protractor を使って要素がクラスを持っているかどうかをテストするには?

2023-03-02 12:17:37

質問

Angularアプリをe2eテストするためにProtractorを試しているのですが、要素が特定のクラスを持っているかどうかを検出する方法がわかっていません。

私の場合、テストは送信ボタンをクリックし、今私はform[name"getoffer"]がクラス.ngDirtyを持っているかどうかを知りたいと思うのです。解決策は何でしょうか?

describe('Contact form', function() {
    beforeEach(function(){
        browser.get('http://localhost:9000');
        element(by.linkText('Contact me')).click();
    });

    it('should fail form validation, all fields pristine', function() {
        element(by.css('.form[name="getoffer"] input[type="submit"]')).click();
        expect(element(by.name('getoffer'))).toHaveClass('ngDirty'); // <-- This line
    });
});

どのように解決するのですか?

を使用する際に気をつけなければならないことがあります。 toMatch() を使用する際に注意しなければならないことのひとつに、部分一致があります。例えば、ある要素がクラス correctincorrect というクラスを持っていることをテストしたい。 correct . もしあなたが expect(element.getAttribute('class')).toMatch('correct') を使うと、たとえその要素に incorrect クラスであっても真を返します。

私の提案です。

完全一致しか受け付けないのであれば、そのためのヘルパーメソッドを作ればよいでしょう。

var hasClass = function (element, cls) {
    return element.getAttribute('class').then(function (classes) {
        return classes.split(' ').indexOf(cls) !== -1;
    });
};

というように使うことができます。 expect が自動的にプロミスを解決することを利用して)このように使うことができます。

expect(hasClass(element(by.name('getoffer')), 'ngDirty')).toBe(true);