2017-09-29 16 views
2

私のページ上で複数の要素を選択しようとしています。 この機能は手動で行うとうまく動作しますが、分度器を使用してオートメーションに問題が発生しています。分度器:Ctrlをクリック

これは私のptor機能である:それは、DOMで要素を取得し、その上にマウスを移動し、Ctrlクリックを眠る名に値ごとにそう

this.selectElements = function (names) { 
    for(var i = 0; i < names.length; i++){ 
     var parentElement = element(by.xpath('//div[@aria-label="select group ' + names[i] + '"]')); 
     browser.wait(EC.presenceOf(parentElement), DEFAULT_WAIT_TIMEOUT); 
     browser.actions() 
      .mouseMove(parentElement).perform(); 
     browser.sleep(500); 
     browser.actions().keyDown(protractor.Key.CONTROL) 
      .click() 
      .perform(); 
    } 

次のように6つの要素にこの関数を呼び出した結果は、以下の要素が選択される。

  • 最初の要素のみ
  • 単独で第二
  • と第第2の
  • 第4単独
  • それは多くても2つの要素に選択すなわち第
  • 第単独

WITH 第五のは、すべての選択を解除し、二つの最もに再度選択します。 何が起こっているか考えてみませんか?

その他の質問:(browser.actions()を使用する代わりに)これらのアクションを要素に直接送信することは可能ですか?キーボードキーやマウスアクションだけを要素に送ることができるようですが、sendKeys()。click()などのように一度に両方を送ることはできません。

答えて

2

問題は、メソッドを呼び出すことによって、各ループのアクションシーケンスを実行していることです。代わりに、ループ内のすべてのアクションシーケンスをチェーンし、最後に実行する必要があります。下記の例を試してみてください。

this.selectElements = function (names) { 
    var actionSequence = browser.actions().keyDown(protractor.Key.CONTROL); 
    for(var i = 0; i < names.length; i++){ 
     var parentElement = element(by.xpath('//div[@aria-label="select group ' + names[i] + '"]')); 
     actionSequence = actionSequence.mouseMove(parentElement).click(); 
    } 
    actionSequence.perform(); 
}