我正在开展我的角度e2e测试项目。我有以下html生成作为我的ng-repeat的一部分而没有任何id,我想选择带有标题Topic - xyz的第二个元素,然后点击它是兄弟的孩子的按钮。我怎么能这样做。
<div class="row ng-scope" ng-repeat="post in posts">
<div class="col-md-7">
<h4 class="ng-binding">Topic - ABC</h4>
<div class="text-right">
<button class="btn btn-none btn-sm" ng-click="posts.newPost()">
Create Post
</button>
</div>
</div>
</div>
<div class="row ng-scope" ng-repeat="post in posts">
<div class="col-md-7">
<h4 class="ng-binding">Topic - XYZ</h4>
<div class="text-right">
<button class="btn btn-none btn-sm" ng-click="posts.newPost()">
Create Post
</button>
</div>
</div>
</div>
<div class="row ng-scope" ng-repeat="post in posts">
<div class="col-md-7">
<h4 class="ng-binding">Topic - EFG</h4>
<div class="text-right">
<button class="btn btn-none btn-sm" ng-click="posts.newPost()">
Create Post
</button>
</div>
</div>
</div>
这是我到目前为止尝试过的无效
var button = $$(by.repeater('post in posts')).get(1).$(by.css('[ng-click="posts.newPost()"]'))
button.click(); // click is not showing up
答案 0 :(得分:3)
$$(by.repeater('post in posts'))
和$(by.css('[ng-click="posts.newPost()"]'))
- 这些不是使用by.repeater()
或by.css()
定位器的正确语法。 $$
是element.all(by.css())
的快捷方式,不应用于“转发器”定位器。如果您使用$()
,则无需将您的选择器包装到by.css()
:
var button = element.all(by.repeater('post in posts')).get(1).$('[ng-click*=newPost]');
button.click();
如果您想按主题名称过滤转发器元素,您可以使用.filter()
:
var button = element.all(by.repeater('post in posts')).filter(function (post) {
return post.$("h4").getText().then(function (postTitle) {
return postTitle === "Topic - XYZ";
});
}).get(1).$('[ng-click*=newPost]');
button.click();
另外,看看使用by.buttonText
locator是否也能正常工作(更清洁一点):
var post = element.all(by.repeater('post in posts')).get(1);
var button = post.element(by.buttonText("Create Post"));
button.click();