2017-03-20 5 views
0

私はこのテストを午後のほとんどのところで戦ってきました。私は何をしようとしたのかコメントしましたが、うまくいかないでしょう。会社内のユーザーを検索する機能があり、テーブルが生成され、ユーザーの名前と一致するものを選択したいと考えています。現在、私はtd.text-centerをテーブル内の唯一のtdとして使用していますが、同じ名前の他のユーザーがシステムに存在する場合、これは実際には貧弱で、破損しやすいようです。分度器テストは非常に遅く、しばしばタイムアウトします

試行2は最善の解決策であると思われますが、常に要素が見つからないというエラーが表示されます。テーブル内でTDを見つける信頼できる方法を見つけた人はいますか?この方法は、以下だけではない、この1 ....

this.editUser = function(name) { 

     // Original Code Block 
     //browser.actions().mouseMove(element(by.css('td.text-center'))).perform(); 
     //var editUserBtn = element(by.css('.user-action-open')); 
     //editUserBtn.click().then(function() { 
     // var editDetails = element(by.cssContainingText('li > a', 'Edit Details')); 
     // browser.wait(EC.visibilityOf(editDetails), 3000); 
     // editDetails.click(); 
     //}); 


     // Attempt 2 

     // browser.actions().mouseMove(element(by.css('td.text-center'))).perform(); 
     //browser.sleep(3000); 
     //var edit = element.all(by.repeater('user in users')).filter(function(rowElement){ 
     // return rowElement.element.all(by.css('td[ng-bind="user.Firstname"]')).getText().then(function(text){ 
     //  return text.trim() == name; 
     // }); 
     //}).first(); 
     //browser.actions().mouseMove(edit).perform(); 


     // Currently just times out and doesn't find the element. 

     var editUserButton = $('.user-action-open'); 
     browser.wait(EC.visibilityOf(editUserButton), 20000).then(function() { 
      editUserButton.click().then(function() { 
       var editDetails = element(by.cssContainingText('li > a', 'Edit Details')); 
       browser.wait(EC.visibilityOf(editDetails), 3000); 
       editDetails.click(); 
      }); 
     }); 
    } 

答えて

1

あなたは、いくつかの3秒間スリープ任意に待っている代わりに行うためにExpectedConditionsを使用することができ、他のテーブルで動作します。代わりにブラウザの待機を行うことができます。オブジェクトが希望の状態にある場合、これはタイムアウトまで待機します。

let users = element.all(by.repeater('user in users'); 

    // the original post shows that this is an element.all 
    // this would only be true if the user can have multiple first names 
    let firstName = element(by.css('td[ng-bind="user.Firstname"]')); 

    browser.actions().mouseMove(element(by.css('td.text-center'))).perform(); 

    // wait to see if the repeater is present or timeout in 3 seconds 
    browser.wait(users).isPresent(), 3000); 

    let edit = element.all(users).filter((rowElement) => { 
     // wait for first name, get the first name of the row's element 
     // if the text matches the name, resolve the promise true. 
     return browser.wait(rowElement.firstName, 3000).then(() => { 
     return rowElement.firstName.getText().then((text) => { 
      return text.trim() == name; 
     }); 
     }); 
    }).first(); 

    browser.actions().mouseMove(edit).perform(); 

rowElement.firstNameが正しい構文でない可能性があります。


よさそう約束

// wait to see if the repeater is present or timeout in 3 seconds 
    browser.wait(users).isPresent(), 3000).then(() => { 
    let edit = element.all(users).filter((rowElement) => { 
     // wait for first name, get the first name of the row's element 
     // if the text matches the name, resolve the promise true. 
     return browser.wait(rowElement.firstName, 3000).then(() => { 
     return rowElement.firstName.getText().then((text) => { 
      return text.trim() == name; 
     }); 
     }); 
    }).first(); 

    browser.actions().mouseMove(edit).perform(); 
    }).catch(err => { 
    // we could also have asserted the length was at least 1 
    // maybe we want to catch on something else? maybe this isn't a 
    // fail case so maybe do not use `fail(` 
    fail("did not find users"); 
    }); 
+0

の連鎖、私は私がやろうとした主なものは、行をホバーするbrowser.actions.mouseMoveを削除し、ループフィルタと交換だったと思いますどのような理由であれ、私はそれをするように見えませんので、このメソッドを試してみてください – theHussle

+0

オブジェクトをクリックしようとしている場合は、そのオブジェクトがクリック可能であることを確認してください。任意のタイムアウトは理想的ではありません。また、なぜマウスが動いたのかわからなかった。私は '' td.text-center ''の上にホバリングした後に登場するメニューと関係があると判断しました。行方不明の別のものは、クリックする予定のクリックアクションです。 – cnishina

+0

ええ、それは理想的なデザインではなく、一緒に作業する必要があります。基本的には、テーブルを生成すると、その特定の行を編集するためのボタンが表示されます。そのため、行を表示するためのハックコードが表示されますが、この設定は検索に依存しているため単一のtd行更新された答えは – theHussle

関連する問題