#c# #selenium #xpath
#c# #selenium #xpath
Вопрос:
Кто-нибудь может помочь мне получить xpath (из второго div-метки элемента span, которая является GP)
<div class="ohg-patient-banner-suppl-info-section ohg-patient-banner-suppl-info-custom pure-u-1-5">
<div class="ohg-patient-banner-suppl-info-component-container ohg-patient-banner-suppl-info-component-left-bordered ohg-patient-banner-suppl-info-custom" aria-label="Visit Info" role="group"><div class="ohg-patient-banner-suppl-info-section-summary" aria-hidden="false">
</div>
<div class="ohg-patient-banner-suppl-info-section-detail" aria-label="" aria-hidden="true">
<div class="ohg-patient-banner-suppl-info-custom-field">
<span class=" " aria-hidden="true"></span>
<span class=" ohp-metadata-label">Location</span>
<span class="ohg-patient-banner-suppl-info-custom-row-value-icon " aria-hidden="true"></span>
<span class=" ohg-patient-banner-suppl-info-value">Tauranga Hospital - Assmt Plan Unit TAU - </span>
</div>
</div>
</div>
</div>
<div class="ohg-patient-banner-suppl-info-section ohg-patient-banner-suppl-info-custom pure-u-1-5">
<div class="ohg-patient-banner-suppl-info-component-container ohg-patient-banner-suppl-info-component-left-bordered ohg-patient-banner-suppl-info-custom" aria-label="GP Info" role="group"><div class="ohg-patient-banner-suppl-info-section-summary" aria-hidden="false">
</div>
<div class="ohg-patient-banner-suppl-info-section-detail" aria-label="" aria-hidden="true">
<div class="ohg-patient-banner-suppl-info-custom-field">
<span class=" " aria-hidden="true"></span>
<span class=" ohp-metadata-label">GP</span>
<span class="ohg-patient-banner-suppl-info-custom-row-value-icon " aria-hidden="true"></span>
<span class=" ohg-patient-banner-suppl-info-value">-</span>
</div>
</div>
</div>
</div>
Мой XPath, который я написал, работает для первого div, и он возвращает значение Location :
.//*[@class='ohg-patient-banner-suppl-info-section-detail']/div[@class='ohg-patient-banner-suppl-info-custom-field']/span[@class=' ohp-metadata-label']
Ответ №1:
Xpath:
//*[@class='ohg-patient-banner-suppl-info-custom-field']//span[2]
затем вы можете использовать gettext(), чтобы получить GP в виде текста
Ответ №2:
Попробуйте это выражение XPath-1.0:
//*[@class='ohg-patient-banner-suppl-info-section-detail']/div[@class='ohg-patient-banner-suppl-info-custom-field' and span[@class=' ohg-patient-banner-suppl-info-value']='-']/span[@class=' ohp-metadata-label']
Его результатом является:
GP
Ответ №3:
- программное решение:
ваш xpath фактически возвращает оба элемента:
в вашей библиотеке selenium вы, скорее всего, получаете массив и можете выбрать второй его элемент
- выберите второй элемент:
если это всегда второй элемент, добавление [2]
в xpath помогает, например "(.//*[@class='ohg-patient-banner-suppl-info-section-detail'])[2]/div[@class='ohg-patient-banner-suppl-info-custom-field']/span[@class=' ohp-metadata-label']"
- фиксированным текстом
Если у вас есть какой-либо текст на странице, который исправлен, например, Location
, вы можете использовать его в качестве ссылки, а затем использовать оси ancestor
и sibling
".//span[.='Location']//ancestor::div[@class='ohg-patient-banner-suppl-info-section-detail']//following-sibling::div[@class='ohg-patient-banner-suppl-info-section-detail']//span[@class=' ohp-metadata-label']"
Комментарии:
1. спасибо за ответ, и я попробовал первый XPath, как вы упомянули, и я получил исключение NoSuchElementException (Сообщение = Не удается найти элемент с помощью xpath == .//*[@class=’ohg-patient-banner-suppl-info-section-detail’][2]/div[@class=’ohg-patient-banner-suppl-info-custom-field’]/span[@class= ‘ohp-metadata-label’])
2. извините, в моем ответе была ошибка, теперь ее следует исправить
Ответ №4:
Поскольку у вас нет других уникальных идентификаторов, а имя класса используется двумя промежутками, вот как вы можете идентифицировать этот промежуток на основе его индекса, и это самый короткий способ:
xpath: (//span[@class=' ohp-metadata-label'])[2]
Теперь вы можете очистить текст с помощью метода selenium getText().
Обратите внимание, что мы использовали индекс 2 для определения вашего локатора, но если html-код изменится, и новые аналогичные области будут добавлены до этого, вам нужно будет изменить индекс.