Как получить текст из вложенного span - selenium - c # - PullRequest
0 голосов
/ 11 мая 2018

У меня есть этот HTML:

<span class="title-book">
   Sherlock_Holmes
   <span class="count-market">834</span>
</span>

Я хочу извлечь только значение первого диапазона, я попробовал оба метода:

IList<IWebElement> ListBooks = MenuAll.FindElements(By.XPath("//span[@class='title-book']"));

и

IList<IWebElement> ListBooks = MenuAll.FindElements(By.CssSelector(".title-book"));

Но я получаю такой результат: Sherlock_Holmes834 .

Почему?

Ответы [ 2 ]

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

Текст Sherlock_Holmes находится внутри тега <span class="title-book"> ... </span>. Таким образом, чтобы получить текст Sherlock_Holmes , вы можете использовать следующий блок кода:

IWebElement elem = driver.FindElement(By.XPath("//span[@class='title-book']"));
string myText = (string)((IJavaScriptExecutor)driver).ExecuteScript("return arguments[0].firstChild.textContent;", elem);
0 голосов
/ 11 мая 2018

Проблема в том, что элемент span.title-book содержит не только нужный текст, но также и другой SPAN, который содержит текст "834". Текст «Sherlock_Holmes» считается текстовым узлом и не может быть получен с использованием только Selenium, мы должны использовать Javascript для его получения.

/// <summary>
/// Returns the text of the specified child text node.
/// </summary>
/// <param name="parentElement">The parent <see cref="IWebElement"/> of the desired text node.</param>
/// <param name="index">The index of the childNode collection relative to parentElement</param>
/// <returns>The text of the specified child text node.</returns>
public string GetChildTextNode(IWebElement parentElement, int index = 0)
{
    string s = (string)((IJavaScriptExecutor)driver).ExecuteScript("return arguments[0].childNodes[arguments[1]].textContent;", parentElement, index);
    return s.Trim();
}

Вы бы назвали это как

Console.WriteLine(GetChildTextNode(driver.FindElement(By.CssSelector("span.title-book"))));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...