如何在量角器测试中测试重新排序 Ag-Grid 列?

Posted

技术标签:

【中文标题】如何在量角器测试中测试重新排序 Ag-Grid 列?【英文标题】:How to test re-ordering Ag-Grid columns in Protractor test? 【发布时间】:2020-11-21 08:39:03 【问题描述】:

下面是我在ag-grid 上运行的量角器测试:

element.all(by.css('div.ag-header-cell'))
    .map(function (cell) 
        return cell.getText();
     )
        .then(function (cellValues) 
            expect(cellValues).toEqual(["Spec. or Material", "Grade/Type", "UNS", "Product Form", "%C", "%Mn", "%Si", "%Cr", "%Ni", "%Mo", "Other"]);
);

// Above, we check the text contained in the header cells

// Then I am re-ordering the header cells by dragging 1 of them over the other:

browser.actions()
    .dragAndDrop(
        element(by.xpath('/html/body/app-root/app-shell/div/app-chemistry/div/div[2]/div/ag-grid-angular/div/div[1]/div/div[1]/div[2]/div/div/div[5]/div[3]/div/span[1]')),
        element(by.xpath('/html/body/app-root/app-shell/div/app-chemistry/div/div[2]/div/ag-grid-angular/div/div[1]/div/div[1]/div[2]/div/div/div[10]/div[3]/div')))
            .perform();

// I used `browser.sleep(10000)` to verify the re-ordering is happening.

// Then I added this code with the titles re-ordered:

element.all(by.css('div.ag-header-cell'))
    .map(function (cell) 
        return cell.getText();
     )
         .then(function (cellValues) 
              expect(cellValues).toEqual(["Spec. or Material", "Grade/Type", "UNS", "Product Form", "%Mn", "%Si", "%Cr", "%Ni", "%Mo", "%C", "Other"]);
);

但是,测试失败了,需要原始顺序。

从下面的 HTML 中可以看到,当我将鼠标悬停在 %C 上时,它是页面上的第 10 列,但它仍然是源代码中的第 5 列:

如果 HTML 没有更新,谁能告诉我如何测试这种重新排序?

【问题讨论】:

【参考方案1】:

left in style 确定的列位置。左侧值更大,列更靠近右侧。

您需要在所有列的style 属性中获取left 值并对值进行排序。

element.all(by.css('div.ag-header-cell'))
  .map(function (column) 
    left = column.getAttribute('style').then(function(style)
      return parseInt(style.split('left:')[1].split('px')[0])
    )

    return  
      "name": column.getText(),
      "left": left 
    
  )
  .then(function (colums) 

    expectColumn = [
      "Spec. or Material", "Grade/Type", "UNS", 
      "Product Form", "%Mn", "%Si", "%Cr", "%Ni", 
      "%Mo", "%C", "Other"
    ]

    orderedColumn = colums.sort(function(a,b)
      return a.left - b.left
    )
    .map(function(it)
      return it.name
    )

    expect(orderedColumn).toEqual(expectColumn);
);

【讨论】:

以上是关于如何在量角器测试中测试重新排序 Ag-Grid 列?的主要内容,如果未能解决你的问题,请参考以下文章

AG-Grid - 显示排序图标而不重新加载数据

如何在ag-grid中默认对列进行排序?

如何使用空标题名称对 AG-Grid 中的列进行排序

ag-grid:在过滤器测试功能中访问行数据

如何不忘记再次将量角器转换为角度同步?

Ag-Grid:应用过滤器后如何保存和重新加载列