web-dev-qa-db-ja.com

imgタグが存在するかどうかをテストするにはどうすればよいですか?

expect(img).not.toBe(null)を実行すると、Error: expect called with WebElement argment, expected a Promise. Did you mean to use .getText()?というエラーが発生します。 img内のテキストを取得するのではなく、ページにタグが存在するかどうかを知りたいだけです。

describe('company homepage', function() {
it('should have a captcha', function() {

    var driver = browser.driver;
    driver.get('http://dev.company.com/');

    var img =driver.findElement(by.id('recaptcha_image'));

    expect(img.getText()).not.toBe(null);
});
});

合格ですが、正しいことをテストしているとは思いません。 IDを存在しないものに変更すると失敗します。

非角度アプリコンテキストで分度器を使用してタグが存在するかどうかを適切にテストするにはどうすればよいですか?

16
Maslow

編集2:

以下のコーディングスマックダウンごとに、分度器でさらに短い回答を利用できるようになりました。

expect(element(by.id('recaptcha_image')).isPresent()).toBe(true);


編集1:

本日isElementPresent()を発見しました。これは、以下で説明するもののより読みやすいショートカットです。参照: http://www.protractortest.org/#/api

あなたのための使用法は次のようになります:

driver.isElementPresent(by.id('recaptcha_image')).then(function(present){
    expect(present).toBe(false);
})

古い答え(これは機能しますが、上記はより読みやすいです)

一般的に、タグがあるかどうかわからない場合は、findElements(または、cssによるfindElementsのエイリアスである$$)を使用する必要があります。次に、配列の長さをテストします。 FindElement(および$)は、要素が見つからない場合にエラーをスローします。

したがって、代わりに

var img =driver.findElement(by.id('recaptcha_image'));

expect(img.getText()).not.toBe(null);

使用する:

driver.findElements(by.id('recaptcha_image')).then(function(array){
    expect(array.length).not.toBe(0);
})

また、getText()はpromiseを返します。そのため、このエラーが発生します。

32
wlingke

最新のProtractorビルドを使用すると、次のように短縮できます。

expect(element(by.id('recaptcha_image')).isPresent()).toBe(true);
24