2017-12-28 73 views
1

JavaScriptを使用して書かれた自動テストスクリプトを実行しようとするたびに、これらの2つが実際には互いに独立して実行されていることがわかります。例: - 数、前と後が、(それがロードするのに長い時間がかかるので)最初に、私はその後、分度器をJSを取得し、protractorテストでJavaScriptを連続して実行しない

it("Validation of ND account", function() { 

    // I logged in, and navigated to the page I need 
    // And this is where is gets intresting 

    console.log("\n"); 
    console.log("Before getting number of users"); 
    var numberOfUsers = element(by.xpath('//div[@viewid="userList"]//div[@class="results-count ng-binding"]')).getText().then(function(text) { 
     console.log(text); 
    }); 
    console.log("After getting number of users"); 

// for (i=1, i<numberOfUsers, i++) { 
//  console.log(i); 
// } 

    }); 

私は同じ順序で私のログを取得することを前提としています。これは、コンソール出力で、このスクリプトを実行した結果である:そうは言って

Started 
[32m.[0m 

Before getting number of users 
After getting number of users 
161 
[32m.[0m 

2 specs, 0 failures 

、私の問題は、私は、ページを開く要素のテキストを取得し、それをいくつかの操作を実行したい場合(FORを実行することですループがコメントアウトされている場合)、ページをロードする前に未定の約束を返すので、これをやりなくします。もっと正確に言うと、ページを開く前に、ページがロードされる直前に、そのループを実行します。これはページの要素に依存します。要素がまだ表示されず、プログラムにもtext属性がないため、ループは失敗します。だからここに質問があります:スクリプトシーケンスを厳密に遵守することが可能です(JSコマンドを実行する前に分度器コマンドを書き込んだ後にスクリプトを実行させないようにする)ことが可能ですか?

答えて

0

Promisesを理解し、コールバックを使用して順番に機能するようにする必要があります。この特定のケースでは

、あなたは、コールバック関数の内部で継続する必要があるでしょう、続けるために、あなたのテストのためにnumberOfUsersを待つことはできません。

console.log("\n"); 
console.log("Before getting number of users"); 
element(by.xpath('//div[@viewid="userList"]//div[@class="results-count ng-binding"]')).getText().then(function(text) { 
    console.log(text); 
    // continue working here with "text" 
    console.log("After getting number of users"); 
}); 
+0

私は何をすべきか完了することがまだできません。今私はこれに直面するhttps://stackoverflow.com/questions/48016927/protractor-script-doesnt-work-properlyおそらく同じ理由で –

関連する問題