Я предполагаю, что вы используете Angular2 +, да?
В вашем шаблоне HTML вы, вероятно, используете директиву *ngFor
для динамического заполнения таблицы. Добавьте индекс к *ngFor
(это лучшие практики для обновления DOM), чтобы добавить динамический c идентификатор для каждого элемента:
<tr *ngFor="let user of user; index as u" id="user-{{u + 1}}">
<td id="userName-{{u + 1}}">
{{user.firstName}} {{user.userName}}<br />
{{user.userName}}
</td>
<td id="userRoles-{{ u + 1 }}">
<span id="role-{{u + 1}}-{{ r + 1 }}" *ngFor="let role of user.roles; index as r">
{{ role.toUpperCase() + ', '}}
</span>
</td>
<!- Omitted code -->
</tr>
В вашем объекте страницы:
// Get first user on the table
get firstUser() {
return element(by.id('user-1');
}
// Get a specific user by id
public getUser(index: number) {
return element(by.id(`user-${index}`);
}
// Get all of the attributes for a single user by id
get userAttributes(index: number) {
return element.all(by.id(`user-${index}`);
}
Я не фанат xpath
селекторов. Да, они быстрее. Но в коде, который является динамическим c или часто изменяется, они являются наиболее частыми из 1018 * селекторов. Нет никаких причин, по которым ваши динамические c данные не могут иметь динамический c идентификатор, который четко идентифицирует каждую часть кода, который вам нужен.
Удачи!