Как получить текст из текстового узла в элементе через Xpath, C # и Selenium - PullRequest
0 голосов
/ 23 мая 2018

Я - инженер по автоматизации испытаний, работающий в селене последние несколько лет. Это мой первый пост в Stackoverflow.

Я пытаюсь извлечь текст из элемента, но селен даже не идентифицирует элемент.Я использую настройку specflow в visual studio и c # в качестве языка.

Ниже приведен пример HTML-кода (это просто примерная структура HTML-кода, а не исходная):

<p class="day">
 <meta atts="somevalue">
 <span>Some text</span>
 <meta atts="somevalue">
 <meta atts="somevalue">
 "Active"
</p>

Я хочу получить текст Актив из приведенного выше HTML.

Я написал несколько xpath для этого, когда я проверяю это в chrome, xpaths верны, и он выделяет элемент

Испытания Xpaths:

1. //p[@class='day']/text()
2. //p[@class=''day]/meta[@atts='somevalue'][3]/following-sibling::text()
3. few more..

для всехxpaths text() находится между или в конце.все они верны и уникальны, когда я проверял это вручную.

в веб-странице, которую я автоматизирую, нет фреймовТакже нет проблемы с загрузкой страницы.Я пытался с различными заявлениями ожидания.также попытался задать long thread.sleep ().

расположение элемента всегда одинаково.только значение в нем будет изменено.т. е. xpath для этого элемента не является динамическим.

Я получаю сообщение об ошибке в строке ниже.(драйвер инициализирован правильно, он работает для всего остального)

String StatusVal = driver.FindElement(By.XPath("(//meta[@itemprop='closes'])[1]/following-sibling::text()")).Text;

Что бы я ни пытался, я получаю приведенную ниже ошибку, говоря, что элемент не найден,

OpenQA.Selenium.NoSuchElementException: Could not find element by: By.XPath: (//meta[@itemprop='closes'])[1]/following-sibling::text()

Вышеприведенное действительноxpath, если я вручную проверяю xpath после того, как тест не пройден в том же браузере, он доступен там и является уникальным.

то есть, в моем анализе мой xpath верен, фреймы не задействованы, естьНет проблем с ожиданием на странице, так как я успешно выполняю действия с ближайшими элементами, и я даю более чем достаточно времени для загрузки страницы.все нормальные настройки селена сделаны в моей системе, и все работает отлично, кроме этой.

Версия Selenium: 3.12.0

1 Ответ

0 голосов
/ 23 мая 2018

Согласно HTML , предоставленному вами для извлечения текста Актив , вы можете использовать ExecuteScript() метод из IJavaScriptExecutor Interface следующим образом:

IWebElement myElem = driver.FindElement(By.XPath("//p[@class='day']"));
string myText = (string)((IJavaScriptExecutor)driver).ExecuteScript("return arguments[0].lastChild.textContent;", myElem);
Console.WriteLine(myText);
...