2016-12-13 49 views
1

使用行中的文本行数我有表结构如下获取量角器

<table class="table"> 
    <thead> 
    <tr> 
     <th class="checkbox-column"></th> 
     <th class="main-column main-column--checkbox">Name</th> 
    </tr> 
    </thead> 
    <tbody ng-repeat="(a, b) in tests" class="ng-scope" style=""> 
    <tr class="panel__sub-header"> 
     <td> 
     <input name="item-checkbox" ng-click="toggleSelectAll(a)" type="checkbox"> 
     </td> 
     <td colspan="4"> 
     <h4 class="ng-binding">ROW2</h4> 
     </td> 
    </tr> 
    <tr ng-repeat="test in testData" ng-class-odd="'odd'" ng-class-even="'even'" class="ng-scope odd" style=""> 
     <td class="checkbox-column"><input name="item-checkbox" ng-click="checkFunction()" type="checkbox"></td> 
     <td class="main-column"> 
     <a ng-href="#" class="ng-binding" href="#">test.name</a> 
     </td> 
    </tr> 
    <tr ng-repeat="test in testData" ng-class-odd="'odd'" ng-class-even="'even'" class="ng-scope odd" style=""> 
     <td class="checkbox-column"><input name="item-checkbox" ng-click="checkFunction()" type="checkbox"></td> 
     <td class="main-column"> 
     <a ng-href="#" class="ng-binding" href="#">test.data</a> 
     </td> 
    </tr> 
    </tbody> 
    <tbody ng-repeat="(a, b) in tests" class="ng-scope" style=""> 
    <tr class="panel__sub-header"> 
     <td> 
     <input name="item-checkbox" ng-click="toggleSelectAll(a)" type="checkbox"> 
     </td> 
     <td colspan="4"> 
     <h4 class="ng-binding">ROW1</h4> 
     </td> 
    </tr> 
    <tr ng-repeat="test in testData" ng-class-odd="'odd'" ng-class-even="'even'" class="ng-scope odd" style=""> 
     <td class="checkbox-column"><input name="item-checkbox" ng-click="checkFunction()" type="checkbox"></td> 
     <td class="main-column"> 
     <a ng-href="#" class="ng-binding" href="#">test.name</a> 
     </td> 
    </tr> 
    <tr ng-repeat="test in testData" ng-class-odd="'odd'" ng-class-even="'even'" class="ng-scope odd" style=""> 
     <td class="checkbox-column"><input name="item-checkbox" ng-click="checkFunction()" type="checkbox"></td> 
     <td class="main-column"> 
      <a ng-href="#" class="ng-binding" href="#">test.data</a> 
     </td> 
    </tr> 
    </tbody> 
</table> 

我需要通过使用下面的 element(by.repeater('(a, b) in tests').row(0)).element(by.css('[xxx]'))拿到表格单元格。目前正在使用的硬编码行数来实现这一点,但它不是所有的工作时间,由于动态UI改变

这有可能通过将文本量角器

防爆得到使用的行号: 如果我通过文字ROW2那么就应该使用中继器(a, b) in tests然后我可以能够使用的行数动态

回答

2

您可以使用filter()方法获取包含预期文本的特定行,而不是通过获取行号来完成此操作。

var columnElement = element.all(by.repeater('(a, b) in tests')).filter(function(rowElement){ 
    return rowElement.element(by.css("td h4")).getText().then(function(text){ 
    return text.trim() == "ROW2" 
    }); 
}).first().element(by.css("somecss")); 
+0

谢谢,也可以扩展相同的从嵌套表中获取值吗?即使用'test.name'元素在testData'中获得'tr'嵌套中继器'测试 – Prabhu

1

与XPath搜寻返回的行号为0:

element(by.repeater('(a, b) in tests').row(0)).element(by.xpath('XXX')) 

function GetRowNumber(yourText) 
{ 
    var items = element(by.repeater('(a, b) in tests')).all(by.tagName('h4')).map(function(elem) { 
     return elem.getText(); 
    }); 

    return items.then(function(elems){ 
     for(var i = 0; i < elems.length; i++) 
     { 
      if(elems[i] === yourText) 
       return i; 
     } 
    }); 
} 

此代码尚未经过测试。

+0

实际上'元件(by.xpath( 'XXX'))'部分是没有问题的。需要的是通过使用该行中的文本来获得行号“row(0)'应该被动态获取 – Prabhu

+0

我更新了我的答案。 – FCin

0
var getRowNumber = function (text) { 
    var tbody = element(by.repeater('(a, b) in tests')); 
    tbody.filter(function (elem, index) { 
     if (!!elem.element(by.cssContainingText('h4', text))) { 
      return index; 
     } 
    }) 
}; 
console.log('row number :'+ getRowNumber('ROW2'));