量角器 - 在 ng-repeat 中获取子元素的文本
Protractor - get text of a child element in ng-repeat
我正在使用 Protractor 测试 angular 页面。此页面有一个由 ng-repeat 填充的 table,我想在该 table 中添加文本。这是 HTML 代码:
<div class="data-group ng-scope" ng-repeat="group in tableData | filter: filterText | orderBy: getValueToOrderByGroup() : sortingCriteria.descending" ng-show="filtered.length > 0">
<div class="data-row group-header">
<div class="col-md-6">
<i ng-click="group.hideRows = !group.hideRows" ng-class="{'rotate-down': group.hideRows}" class="fa fa-fw fa-chevron-right"></i>
<strong class="text-capitalize ng-binding" ng-click="group.hideRows = !group.hideRows"> HEADER TEXT </strong>
</div>
</div>
<div collapse="group.hideRows" class="collapse in" style="height: auto;">
<div class="data-row child-row ng-scope" ng-repeat="thing in filtered = (group.data | filter: filterStuff | filter: filterText | orderBy: getValueToOrderByChild() : sortingCriteria.descending)">
<div class="col-md-3 cell-data child-row-indent text-capitalize">
<span class="clickable-element ng-binding">CHILD ONE</span> <br>
</div>
<div class="col-md-2 child-row-indent-responsive">
<span class="visible-xs visible-sm">Status: </span><span class="ng-binding"> CHILD TWO </span>
</div>
</div>
</div>
这些是我提取文本的语句:
var headerText = element.all(by.repeater('group in tableData')).get(0).all(by.tagName('div')).get(0).element(by.css('div > strong')).getText();
var childOne = element.all(by.repeater('group in tableData')).get(0).all(by.tagName('div')).get(1).element(by.css('div > div:nth-child(1) > span').getText();
当我 运行 这样做时,它返回了所有函数的整个块,但不是实际的文本。任何帮助,将不胜感激。
重要的是要了解 WebdriverJS
和 protractor
本身完全基于承诺的概念,因为它们具有异步性质。参见 Promises and the Control Flow。
换句话说,getText()
在你的情况下 returns 一个承诺。如果想看到实际值,需要解析:
headerText.then(function (text) {
console.log(text);
});
请注意,您不需要在 expect()
中解决承诺 - 它知道如何在做出期望之前解决承诺(感谢 jasminewd
)。
我正在使用 Protractor 测试 angular 页面。此页面有一个由 ng-repeat 填充的 table,我想在该 table 中添加文本。这是 HTML 代码:
<div class="data-group ng-scope" ng-repeat="group in tableData | filter: filterText | orderBy: getValueToOrderByGroup() : sortingCriteria.descending" ng-show="filtered.length > 0">
<div class="data-row group-header">
<div class="col-md-6">
<i ng-click="group.hideRows = !group.hideRows" ng-class="{'rotate-down': group.hideRows}" class="fa fa-fw fa-chevron-right"></i>
<strong class="text-capitalize ng-binding" ng-click="group.hideRows = !group.hideRows"> HEADER TEXT </strong>
</div>
</div>
<div collapse="group.hideRows" class="collapse in" style="height: auto;">
<div class="data-row child-row ng-scope" ng-repeat="thing in filtered = (group.data | filter: filterStuff | filter: filterText | orderBy: getValueToOrderByChild() : sortingCriteria.descending)">
<div class="col-md-3 cell-data child-row-indent text-capitalize">
<span class="clickable-element ng-binding">CHILD ONE</span> <br>
</div>
<div class="col-md-2 child-row-indent-responsive">
<span class="visible-xs visible-sm">Status: </span><span class="ng-binding"> CHILD TWO </span>
</div>
</div>
</div>
这些是我提取文本的语句:
var headerText = element.all(by.repeater('group in tableData')).get(0).all(by.tagName('div')).get(0).element(by.css('div > strong')).getText();
var childOne = element.all(by.repeater('group in tableData')).get(0).all(by.tagName('div')).get(1).element(by.css('div > div:nth-child(1) > span').getText();
当我 运行 这样做时,它返回了所有函数的整个块,但不是实际的文本。任何帮助,将不胜感激。
重要的是要了解 WebdriverJS
和 protractor
本身完全基于承诺的概念,因为它们具有异步性质。参见 Promises and the Control Flow。
换句话说,getText()
在你的情况下 returns 一个承诺。如果想看到实际值,需要解析:
headerText.then(function (text) {
console.log(text);
});
请注意,您不需要在 expect()
中解决承诺 - 它知道如何在做出期望之前解决承诺(感谢 jasminewd
)。