Транспортир, как получить элемент, если другие классы имеют то же имя класса - PullRequest
0 голосов
/ 05 июня 2018

Я использую Protractor с Cucumber для своих тестов, но не могу получить элемент, потому что имя класса такое же, как и у других классов, и у него нет другого атрибута.Как я могу получить этот элемент?Элемент: «tileGrid content».Я не могу использовать xpath, потому что страница иногда редактируется.

Вот мой HTML:

<div class="tileGrid content">
  <div class="spacing-container undefined">
    <div class="title">
      <h3 class="h2 heading">External Services</h3>
    </div>
  </div>
</div>

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 05 июня 2018

Я представляю, что ваша структура похожа на:

<div>
  <div class="tileGrid content">
    <div class="spacing-container undefined">
      <div class="title">
        <h3 class="h2 heading">External Services</h3>
      </div>
    </div>
  </div>
  <div class="tileGrid content">
    <div class="spacing-container undefined">
      <div class="title">
        <h3 class="h2 heading">Other Header</h3>
      </div>
    </div>
  </div>
  <div class="tileGrid content">
    <div class="spacing-container undefined">
      <div class="title">
        <h3 class="h2 heading">Another Header</h3>
      </div>
    </div>
  </div>
 ...
</div>

Есть несколько способов взаимодействия с чем-то подобным, но я приведу только 3 примера:

При этом будет выполнен поиск первого дочернего элемента с тегом div в родительском элементе

by.css('div div.content:nth-of-type(1)') 

При этом будет выполнен поиск первого дочернего элемента с любым тегом в его родительском элементе

by.css('div div.content:nth-child(1)')

.для текста внутри тега h3 и выберет элемент над ним на 3 слоя:

by.xpath('//*/h3[text()="External Services"]/../../..')

Или найдите DIV, который включает H3 и текст H3External Services следующим образом:

by.xpath('//div[contains(@class, "tileGrid")][.//h3[text()="External Services"]]')
...