Cypress получает строку индекса, содержащую элемент, который у меня есть, с заданным атрибутом данных

#indexing #get #row #cypress

Вопрос:

У меня есть коврик-столик с

   <mat-row>
        <mat-cell>Firstname</mat-cell>
        <mat-cell>Lastname</mat-cell> 
        <mat-cell>Age</mat-cell>
      </mat-row>
      <mat-row>
        <mat-cell>Jill</mat-cell>
        <mat-cell>Smith</mat-cell> 
        <mat-cell> <mat-icon data-mat-icon-name="pinned"> </mat-cell>
      </mat-row>
 

И мне нужно знать индекс строки элемента, который имеет data-mat-icon-name='pinned'

Я попробовал приведенный ниже код:

    cy.get("mat-table").find("[data-mat-icon-name='pinned']").invoke("index").then((i) => {
      cy.log(i); // prints 0. Should print 1
    });
 

Но дает мне индекс 0. Следует дать индекс 1.

Так, может быть, это просто указание некоторого индекса ячейки, а не строки?

Есть идеи, как я могу получить индекс строки?

Делать. Мне нужно использовать cy.parent ?

Редактировать:

Если я это сделаю cy.get("mat-table").find("[data-mat-icon-name='pinned']").should("exist");

Элемент выходит в Dom

Комментарии:

1. Что делать, если вы используете mat-row вместо mat-table этого свой локатор ?

2. @АлапанДас. Я не знаю, в каком ряду … Я хочу найти элемент, а затем найти строку, содержащую этот элемент

Ответ №1:

Из jQuery docs .index()

Если методу .index() не передается аргумент, возвращаемое значение представляет собой целое число, указывающее положение первого элемента в объекте jQuery относительно его родственных элементов.

Но <mat-icon> то, что вы находите, само по себе находится в камере.

Вам нужно перейти к родительской строке и найти ее индекс среди братьев и сестер,

 cy.get('mat-table')
  .find('[data-mat-icon-name=pinned]')
  .parents('mat-row')
  .invoke('index')
  .then((i) => {
    cy.log(i); // prints 1
  });