我使用的是来自Angular Material的MatTableModule
,当我显示我的表时,我想给每一行一个id。当我检查元素时,它看起来就像在做,我将看到每个<mat-row>
包含一个id
属性。但是当我运行e2e测试时,它说它无法通过选择器找到元素。下面是表格代码:
<mat-table #table [dataSource]="people" class="table">
<!-- name Column -->
<ng-container matColumnDef="tractor">
<mat-header-cell *matHeaderCellDef class="mat-col-person"> Name</mat-header-cell>
<mat-cell *matCellDef="let person" class="mat-cell-person"> {{person.name}} </mat-cell>
</ng-container>
<mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
<mat-row *matRowDef="let row; columns: displayedColumns; let i = index;" [id]=" 'val'+ i" (click)="onRowSelected(row)"></mat-row>
</mat-table>
onRowSelected(row)
只是导航到页面,然后我检查我需要的元素是否包含所选人员的姓名。
每一行的id为:val#
,如:val1
,val2
等
在我的person-summary.e2e-spec.ts
文件中包含这个表的测试代码,我有:
// removing the beforeEach where I just navigate to the page
it('should navigate to the person summary screen when clicking on a row', ()=>{
// navigates to a page about the user/person
element(by.id('val1')).click();
// wait for the next page to render and see if the element that contains the user's name appears
browser.wait(EC.presenceOf(element(by.id('current-person'))), BROWSER_TIMEOUT);
expect(element(by.id('current-person'))).toBeTruthy();
});
然后得到以下错误:
× should navigate to the person summary screen when clicking on a row
- Failed: No element found using locator: By(css selector, *[id="val1"])
driver = webdriver.Chrome()
rows = driver.find_elements_by_css_selector('mat-table mat-row')
rows.get(0)
尝试在检查行之前添加一些等待,因为mat-row
是动态更新的。不知道为什么id
没有被选中。但是你可以使用
下面的css定位符const ele = element.all(by.css('mat-table mat-row'));
ele.get(0);
希望这能解决问题。