2

エクスポート ボタンをクリックすると、エンドポイントへの REST 呼び出しが行われ、数秒後に応答が返され、テーブルもレンダリングされます。残念ながら、すべての呼び出しが非同期であることを読みました。つまり、テーブルがまだレンダリングされていなくても、期待どおりに実行されます。私が書いた期待は、文字列がテーブルにあるかどうかをチェックしますが、まだそこにないため失敗しています。これに対する適切なアプローチは何ですか?

it('should generate global user report', function() {
    element(by.css('button#exportButton')).click();

    expect(element(by.css("th[name*=Date]")).getText()).
        toEqual('Date');
})

コンソールのエラーは

NoSuchElementError: No element found using locator: By.cssSelector("th[name*=Date]")

テーブルがまだレンダリングされていないことに気付きました。そのため、失敗しています。

4

2 に答える 2

7

分度器 1.7 では、ここで適用できる「期待される条件」と呼ばれる機能が導入されました。

要素が表示されるのを待ちます:

var EC = protractor.ExpectedConditions;
var elm = element(by.css("th[name*=Date]"));

browser.wait(EC.visibilityOf(elm), 5000);
expect(elm.getText()).toEqual('Date');
于 2015-03-04T15:39:56.487 に答える
1

動的要素が表示されるのを待つのに問題がありました。それが存在するか表示されるまでドライバーに待機させます。最後の数字はタイムアウトです。

element(by.css('button#exportButton')).click();
var header = element(by.css("th[name*=Date]"));
browser.driver.wait(function() {
    return header.isPresent();
}, 1000);
expect(header.getText()).toEqual('Date');

テストが完全に安定する前に、それが存在し、表示されるまで待たなければなりませんでした。次のようにできます。

var header = element(by.css("th[name*=Date]"));        
browser.driver.wait(function() {
    return header.isPresent().then(function(present) {
        if (present) {
            return header.isDisplayed().then(function(visible) {                   
                return visible;
            });
        } else {
            return false;
        }
    });
}, 1000);
于 2015-03-04T15:56:18.363 に答える