Как создать локатор xpath, когда элемент не имеет атрибутов

Как я могу получить доступ к элементу с помощью селектора xpath, если этот конкретный элемент не имеет атрибутов?

<challenge-details-card>
<div class="card-body card-content-container">
<div>
<h1 class="card-title text-clr-tertiary">Custom Name</h1>
<hr class="border-clr-gainsboro">
<h3 class="card-info text-clr-tertiary"><span translate="Challenges.ChallengeRuns" ng-reflect-translate="Challenges.ChallengeRu">Challenge runs: </span> 
July 15 - July 27 
<!--bindings={
  "ng-reflect-ng-if": "true"
}-->
<span>(12 days <span translate="Genesis.GlobalLabels.Left" ng-reflect-translate="Genesis.GlobalLabels.Left">Left</span>!)</span>
</h3><p class="card-copy">Custom Text</p>
</div>
</div>
<div class="card-footer background-clr-light-gray">
<a translate="Genesis.Challenges.ViewChallengeRules" ng-reflect-translate="Genesis.Challenges.ViewChallen">View Challenge Rules</a>
</div>
</challenge-details-card>

http://prntscr.com/ofnudx

Я пытаюсь создать xpath, чтобы получить текст «15 июля - 27 июля».


person a92    schedule 16.07.2019    source источник
comment
Какие языковые привязки вы используете? Ява/Питон, С#?   -  person DebanjanB    schedule 16.07.2019


Ответы (3)


Вы можете получить доступ к свойству innerText() элемента тег h3 с использованием оператора XPath text() в сочетании с contains(), что-то вроде:

//h3[contains(text(),'July 15 - July 27')]

Демо:

введите здесь описание изображения

Использованная литература:

person Dmitri T    schedule 16.07.2019
comment
Я хочу прочитать тот конкретный текст, который будет динамическим. Мне нужно получить то, что там написано. - person a92; 16.07.2019
comment
Ну, это текстовый узел, поэтому //h3[contains(text(),'July 15 - July 27')] никогда не будет работать. - person cruisepandey; 16.07.2019
comment
Тогда иди на //h3[contains(@class,'card-info')] - person Dmitri T; 16.07.2019

Текст находится под тегом h3.

Вы можете попробовать этот селектор css:

h3.card-info.text-clr-tertiary

Если вы хотите xpath :

//h3[contains(@class,'card-info text-clr-tertiary')]

Вы можете использовать метод getText() для получения текста, который присутствует в библиотеке selenium-Java.

person cruisepandey    schedule 16.07.2019

Чтобы извлечь текст 15 июля — 27 июля, вы можете использовать следующий Стратегия поиска:

  • Java и xpath:

    System.out.println((String)((JavaScriptExecutor)driver).executeScript("return arguments[0].childNodes[2].textContent;", new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[contains(., 'Challenge runs')]/..")))));
    
person DebanjanB    schedule 16.07.2019