Cypress - нажмите гиперссылку на строку на основе значения двух ячеек - PullRequest
1 голос
/ 10 марта 2020

Попытка заставить скрипт Cypress щелкнуть гиперссылку на основе двух значений - текста гиперссылки в столбце 1 и значения ячейки во втором столбце:

<tbody>
  <tr>
    <td><a href="/id/343408">Anything</a></td>
    <td>Casualty</td>
  </tr>
  <tr>
    <td><a href="/id/338494">Declined Prospect</a></td>
    <td>Casualty</td>
  </tr>
  <tr>
    <td><a href="/id/343408">Declined Prospect</a></td>
    <td>Package</td>
  </tr>
  <tr>
    <td><a href="/id/338494">Declined Prospect</a></td>
    <td>Casualty</td>
  </tr>
  <tr>
    <td><a href="/id/338432">Irrelevant</a></td>
    <td>Package</td>
  </tr>
</tbody>

cy .get ('a'). содержит ('Отклоненная перспектива'). click ()

завершается ошибкой, поскольку существует более одной гиперссылки с этим значением. Идентификатор бесполезен, потому что он динамический c.

В приведенном выше примере я хочу нажать Отклоненный проспект , когда второй столбец равен Casualty (но порядок строк может варьироваться, и значения в первом и втором столбцах повторяются - но только один раз для комбинации).

Есть мысли?

Ответы [ 2 ]

2 голосов
/ 11 марта 2020

Хитрость в том, чтобы нацелиться на <td>Casualty</td>, а затем нажать на предыдущую <td><a>.

Существует довольно много способов добраться до родственных элементов, самый простой в этом случае - prev () .

cy.contains('td', 'Casualty')  // target the 'marker' element
  .prev()                      // move to the previous sibling
  .click()

Подход от строки и двигайтесь внутрь

Чтобы нацелиться на строку с определенной c комбинацией текста в некоторых ее ячейках, просто объедините текст и используйте contains().

cy.contains('tr', 'Declined Prospect Casualty')  // target unique text within children

Это работает даже тогда, когда есть другие ячейки с текстом, которые не подходят для поиска, например,

<tr>
  <td><a href="/id/338494">Declined Prospect</a></td>
  <td>Casualty</td>
  <td>Irrelevent text here</td>
</tr>

Затем вы можете пройти по дереву HTML,

cy.contains('tr', 'Declined Prospect Casualty') // target unique text within children
  .find('td a')                                 // descendant of previous subject
  .click()
1 голос
/ 11 марта 2020

Я думаю, что это может быть полезно: https://github.com/cypress-io/cypress-xpath

Вы можете создавать селекторы в xpath вместо css, а в xpath вы можете искать дерево по тексту. Например:

cy.xpath("//text() = 'Declined Prospect'")

======================================== Отредактировано ==== ================ Вы можете объединить пары селекторов xpatch: это будет выглядеть так //tr[td='Casualty']/td/a

Playgroud

...