2016-11-06 6 views
1

Selenium WebDriverと分度器を使用してAngularJS Webページをテストする必要があります。リピータのng-clickボタンを見つけてクリックするには

HTMLスニペットテストする:

screenshot of the html angular page

私はすでに、ドキュメントを通じてユーチューブ上のチュートリアルを行って、それをグーグルが、私はまだドン:

<tr ng-repeat="item in items" class="ng-scope"> 
    <td class="ng-binding"> 
     Item1 
    </td> 
    <td class="ng-binding"> 
     description 
    </td> 
    <td class="ng-binding"> 
     1234 
    </td> 
    <td> 
     <div ng-click="AddItem(item.id)" class="btn">Add Item</div> 
    </td> 
</tr> 

<tr ng-repeat="item in items" class="ng-scope"> 
    <td class="ng-binding"> 
     Item2 
    </td> 
    <td class="ng-binding"> 
     description 
    </td> 
    <td class="ng-binding"> 
     1235 
    </td> 
    <td> 
     <div ng-click="AddItem(item.id)" class="btn">Add Item</div> 
    </td> 
</tr> 

それはこのようになります特定のアイテムIDを持つ特定のアイテムの「アイテムの追加」を探してクリックする方法を理解しています。

どうすればいいですか?

+0

私はセレンがそのIDでHTMLS要素にアクセスすることができますね。あなたがng-clickを持っているdivに一意のIDを提供していれば、Seleniumのそれらの要素にアクセスできます。一意のIDを提供するには、あなたのDIVタグにid = "ItemAdd {{$ index}}"を追加することができます – user3249448

+0

@ user3249448ウェブサイトの開発者はIDを追加する必要がありますか、 – Sauerkraut

答えて

2

あなたが探している特定のIDはDOM内に存在しません。つまり、そのアプローチを使用して要素を見つけることはできません。

次は私が個人的に使用するコードです:ダニーの答え@に加えて

element.all(by.repeater('item in items')).filter(function(row){ 
return row.all(by.tagName('td')).first().getText().then(function(val){ 
    return val === "Item1" //this can be your per your wish 
    }) 
}).first().$('[ng-click="AddItem(item.id)"]').click(); 
+0

ありがとう!それがまさに私が必要なものです! – Sauerkraut

1

evaluate() method.Tryに以下のコードを使用してDOMからitem.idを見つけることが可能です。

element.all(by.repeater('item in items')).filter(function(row){ 
    return row.evaluate('item.id').then(function(id){ 
     return val === "1234"; 
    }) 
}).first().$('.btn').click(); 

出典:http://www.protractortest.org/#/api?view=ElementArrayFinder.prototype.evaluate

+0

ありがとうございます。最初のアイテムフィールド( "Item1"、 "item2"など)がオプションではなく、完全にユニークなので、私はDannyの答えに行ってきました。私は、レコード自体存在する。 – Sauerkraut

関連する問題