【问题标题】:Traverse through each row for a column text遍历每一行以获得一列文本
【发布时间】:2017-04-05 15:31:02
【问题描述】:

我有一个下面的grid

html代码在pastebin.com/GBP3AZNQ

我想验证“test123”是否存在。我想遍历列主职责名称的每一行并查找文本 test123。

谁能指导我如何做到这一点?

【问题讨论】:

  • 在您的问题中发布任何相关代码并查看stackoverflow.com/help/mcve
  • 嗨 Fcin,我在这里添加了代码,因为它很大 - pastebin.com/GBP3AZNQ ..这就是原帖中提到的......谢谢

标签: loops protractor


【解决方案1】:

您可以使用parent class 并按如下方式实现:

element.all(by.xpath("//div[@class='ui-grid-cell-contents ng-scope ng-binding']")).getText().then(function (msg) 
{ 
console.log("Grid contains" + msg);
expect(msg).toContain("test123");
}

如果假设 Master_obligation 名称是 test_876 那么

var master_obligation_name= "test_876" ;

假设您将义务名称填写为:

element(by.xpath("path to master_obligation text field")).sendKeys(master_obligation_name);

创建行后,验证新添加的行:

 var row_check = element(by.xpath("//div[contains(text(),'test_876')]"));
 if(row_check.isPresent())
 {
  row_check.getText().then(function (msg) {  
        console.log("Grid contains" + msg);
  });
 }

快乐学习。 :-)

【讨论】:

  • 嘿@kishan,但即使值存在,输出也总是失败。即使有一个带有 test_r1 的条目,它也失败了。 - 参考截图 - prnt.sc/eru6bk
  • element.all(by.xpath("//div[@class='ui-grid-cell-contents ng-scope ng-binding']")).get(13).getText().then(function (msg) { console.log("Grid contains" + msg); expect(msg).toContain("test123"); }
  • 你可以做的是,计算已经存在的行数让我们说x并将其存储在一个变量中。然后你输入get(x+1),这样它只会进入新条目并尝试验证新条目而不是get(13)
  • 我不知道你为什么把它弄得这么复杂。您的测试用例应该检查新输入的行是否成功保存。
  • 您可以简单地实现它为:Just check the newly entered Master Obligation name 并通过expect 验证它
【解决方案2】:

检查此代码。它检查给定的文本是否在表格中可用。

    this.searchCourseGrid = function(course){
          var row = element.all(by.css('css path to tr'));
          var cells = row.all(by.tagName('td'));
          var cellTexts = cells.map(function (cell) {
          return cell.getText();
          }).then(function(cellTexts){
            expect(cellTexts).toContain(course);
          });
};

【讨论】:

  • @Acid..谢谢!我会试一试,让你知道
  • 在网格中我没有 tr 或 td。所以,我尝试如下: var cells = element.all(by.xpath("//*[contains(@id, 'uiGrid-0008-cell')]/div")) ------this将识别主义务名称列的所有单元格 var cellTexts = cells.map(function (cell) { return cell.getText(); }).then(function (cellTexts) { expect(cellTexts).toContain("test_r") ; });它失败了,因为它正在与该列的所有条目进行比较。而是应该逐个检查 1
  • 尝试用过滤功能替换地图。
  • 如果我将地图更改为过滤器,它会抛出非常奇怪的错误消息
  • 可以分享一下html吗?
【解决方案3】:

使用 Protractor API 的 element.all().each() 方法可以满足您的要求。请按照下面的代码。将给出特定列的所有行的定位器放在下面的代码中。它将完美地工作。

element.all(by.css('locatorwhichgiveallrows')).each(function(rowElement,  
            index) {
          rowElement.getText().then(function (rowText) {
          if(rowText=="test123"){
              return true;}
     });
}).then(function(isPresent){
console.log("test123 is Present"+isPresent);
});

【讨论】:

  • 这个工作正常。它正在对每一列进行验证。但输出略有不同。它正在将 test123 与每一列进行比较并抛出错误。相反,我希望这样,一旦达到 test123,它应该比较并通过测试。该怎么做?
  • @kav 你想检查一行的每一列,如果 test123 存在则通过?
  • 你是对的......要求是根据主义务名称的每一列验证 test123 并打破循环,一旦找到 test123 并说存在条目
  • 感谢您的回复。但这没有按预期工作。即使值 test123 不存在,输出是 test123 is presentnull
猜你喜欢
  • 2020-02-02
  • 1970-01-01
  • 2020-04-10
  • 1970-01-01
  • 2020-08-20
  • 1970-01-01
  • 2015-07-17
  • 2017-05-18
  • 1970-01-01
相关资源
最近更新 更多