Angular 如何用量角器测试银栅?
在我的应用程序中,我使用ag网格显示数据。我不确定如何在网格中选择一个字段,以便测试它是否存在。我发现的许多例子都没有多大帮助。如果有人能给我指引正确的方向,那就太好了!:)以下是我的HTML代码:Angular 如何用量角器测试银栅?,angular,protractor,automated-tests,ag-grid,Angular,Protractor,Automated Tests,Ag Grid,在我的应用程序中,我使用ag网格显示数据。我不确定如何在网格中选择一个字段,以便测试它是否存在。我发现的许多例子都没有多大帮助。如果有人能给我指引正确的方向,那就太好了!:)以下是我的HTML代码: <div style="height: 90%; text-align: left"> <ag-grid-angular enableColResize groupHeaders style="width: 100%; height: 100%;" [gridOptions]=
<div style="height: 90%; text-align: left">
<ag-grid-angular enableColResize groupHeaders style="width: 100%; height: 100%;" [gridOptions]="gridOptions" (gridReady)="onGridReady($event)"
class="ag-theme-blue" [rowData]="rowData" [columnDefs]= "columnDefs" [enableSorting]="true"
[animateRows]="true" [rowSelection]="rowSelection">
</ag-grid-angular>
编辑:好吧,我取得了一些进步!这不是一个解决方案,而是朝着正确方向迈出的一步:)。这行代码选择ag网格中的第一列
return element(by.css('div.ag-body-container > [role="row"]'))
这一行允许我选择一个特定的索引
return element.all(by.css('div.ag-body-container > [role="row"]')).get(2);
这一行允许我选择包含给定数据的行。例如,这里我要查找一个包含名称“TestName”的行。现在,我可以通过检查是否显示包含TestName的字段来测试是否添加了新字段。为了使这个测试更好,我可以指定我的测试添加一个非常独特的名称,以确保它在数据库中不存在
return element.all(by.cssContainingText('div.ag-body-container > [role="row"]', 'TestName'))
这个网站上的图片就是我的网格的样子
编辑2:更新了具有以下功能的等级库:
it('should select name field', () => {
findRow(page.rows, "TestName").then(row => {
row.getText().then(rowText => {
expect(rowText).toContain('TestName')
好吧,不完美,这似乎起到了作用:
return element.all(by.cssContainingText('div.ag-body-container > [role="row"]', 'TestName'))
现在我只需要弄清楚如何从字段中检索数据。我想我已经很好地掌握了您现在要做的事情 您可以通过使用获取网格中所有行的列表
let rows=element.all(by.css('div.ag-body-container>[role=“row”])代码>
然后,您可以使用.filter()
从这里找到一行,其中包含您正在查找的数据。最好创建一个通用函数,允许您传入要查找的行和字符串,然后在找到元素后返回它
findRow(elements, matcher) {
const relevantRow = elements.filter(element => {
return element.getText().then(text => {
return text.includes(matcher);
});
})
.first()
return relevantRow;
}
您可以从测试中调用它:const row=findRow(rows,'Some Text')
一旦您找到了要查找的行,您就可以从那里对它执行任何需要的操作
编辑:
这里有一个更清楚的例子
// in your page object
public rows = element.all(by.css('div.ag-body-container > [role="row"]'));
// in some helper class
function findRow(rows, matcher) {
return elements.filter(element => {
return element.getText().then(text => {
return text.includes(matcher);
});
})
.first()
}
//in your test
helper.findRow(somePage.rows, 'Some Text').then(row => {
row.getText().then(rowText => {
expect(rowText).toContain('Some Text');
});
});
如果您使用的是async/await,则会是这样
function async findRow(rows, matcher) {
const relevantRow = await rows.filter(row => {
return row.getText().then(text => {
return text.includes(matcher);
});
}).first();
return relevantRow;
}
//in spec
const row = await helper.findRow(somePage.rows, 'Some Text');
expect(await row.getText()).toContain('Some Text');
你能详细说明一下你想要完成什么吗?使用ag-theme-blue
是否仅选择网格中的第一个用户?您正在尝试验证是否存在所有用户或特定用户?也许一个页面截图和一个你想要验证的内容的解释会有帮助。当然。如果我描述得不够详细,我深表歉意。我将在上面添加新的细节。谢谢,你好。我试图模拟您的函数,但在运行测试时遇到以下错误:“-Failed:elements.filter不是函数”我使用您提供的确切模型。在我的测试中,我这样调用函数:wait page.row.click()
。在我的对象类中,我创建了这样的行变量:row=findRow('div.ag-body-container>[role=“row”],'required value'
。任何输入都会很好!谢谢:)对不起,它应该是元素。全部
。我没有意识到我的回答错了。我已经更新了正确的信息。谢谢。建议在对象类中的何处创建rows变量?因为我无法将行传递到我的测试类findRows(rows,'test')
,因为找不到它。我在对象类中创建行变量,如下所示:`rows=element.all(by.css('div.ag-body-container>[role=“row”]')。我还为findRows函数创建了一个单独的类,并将其导出,以便将其导入到测试类中。多谢各位`是的,我会用一个更清楚的例子更新我的答案。好吧,这是一个奇怪的问题。。。我无法记录任何让我相信量角器并没有等待preform测试的东西,即使是异步和等待方面。出于测试目的,我加入了一个浏览器。sleep and Gradurator甚至没有执行那一行,Gradurator直接进入函数并崩溃了。所以我取出了page.navigateTo(),因为我不需要它(我的错误),现在它工作正常。谢谢你的帮助。
function async findRow(rows, matcher) {
const relevantRow = await rows.filter(row => {
return row.getText().then(text => {
return text.includes(matcher);
});
}).first();
return relevantRow;
}
//in spec
const row = await helper.findRow(somePage.rows, 'Some Text');
expect(await row.getText()).toContain('Some Text');