2017-06-23 2 views
0

を終了することはありませんしながら:JavaScriptの分度器ループは最近、私はエラーだ私は分度器</p> <p>でJavaScriptのテストを書いている

FATAL ERROR:CALL_AND_RETRY_LAST割り振りが失敗しました - 確かにメモリのうちのJavaScriptヒープ

をしかし、それメモリエラーではないので、その関数で何か問題があることがわかりました:

ProfilePage.prototype.removeProgrammingLanguages = function() { 
    i=0; 
    while (i < 3) { 
     browser.findElement(By.css("//div/span")).then(null, function (err) { 
      if (err.name == "NoSuchElementError") { 
       i=11; 
      } 
     this.programmingLanguagesRemoveButton.click(); 
     i++; 
     }); 
    } 
}; 

elを見つけるまでボタンをクリックしたいementはNoSuchElementErrorを返します(リストからすべての要素を削除します)。

どういうところが間違っていますか?

+0

を行うために管理し、そのクリックコード、実際にwhileループ内で焼成し、実行しているか、whileループがそれをロックしているです。 – epascarello

+0

私はそれを把握することができません、私はJavaScriptのヒープメモリ不足とログ内の他のものを取得 –

+0

この関数は何をすべきですか?ボタンがクリックできない場合はどうすればいいですか?ボタンを見つけてボタンをクリックしますが、次のページに移動しないと、ヒープエラーが発生するまでループし続けます。 – cnishina

答えて

1

私は最終的にこの

ProfilePage.prototype.removeProgrammingLanguages = function removeProgrLanguages() { 
    browser.findElement(By.xpath("//div/span")).then(function (err) { 
     element(By.css("div.lang-cloud.remove > span")).click().then(removeProgrLanguages); 
    }, function (err) { 
     if (err) { 
      console.log(err.name); 
     } else { 
       promise.rejected(); 
     } 
    }) 
}; 
0

このループは、あなたのCPUがそれらを作成できるように速く約束します。あなたは、約束が解決するのをループが待つことはしていません。そこで、コードを作成して次のコード行に移動します。これは、新しいループを作成するものです。それは最初のものが解決する前に何千もの約束を生み出しています。

Promise.resolve()を使用すると、約束が解決されるのを待つことができます。あなたも再帰的にそうような約束を連鎖することによって、これを解決できるが

:約束を拒否された場合

ProfilePage.prototype.removeProgrammingLanguages = function removeProgrammingLanguages() { 
    return browser.findElement(By.xpath("//div/span")).then(function() { 
     this.programmingLanguagesRemoveBttn = element(By.css("div.lang-cloud.remove > span")); 
     return this.programmingLanguagesRemoveBttn.click().then(removeProgrammingLanguages) 
    }) 
}; 

この機能は停止します。彼らは約束の中で面白くなるので、 'this'リファレンスを変更する必要があります。それは無限ループですので

+0

ありがとうございますが、私は解決できない小さなバグがあります。これは見ていただけますか?:http://i.imgur.com/0oWAq1h.png Promise.resolve()でどのように見えますか? –

+0

申し訳ございません、js – Barteld

+0

のthis.programmingLanguagesRemoveButton.click()がスローされていませんfunction()not()=>関数の外側にある未定義のプロパティ 'click'を読み込めません。 ? –

関連する問題