xPath работает только для одного из нескольких тегов div, найденных на одном уровне - PullRequest
1 голос
/ 03 мая 2020

Написание тестов с помощью веб-драйвера Selenium в C#. Я абсолютно не могу понять, почему только первый в списке элементов div (одного уровня) может быть идентифицирован с помощью xPath. У меня есть html, я проверил два элемента на странице, два разных элемента. Мне удалось скопировать только текст первого элемента, запустив этот простой код:

IWebElement chapterElement = webDriver.FindElement(By.XPath("/html/body/div[3]/main/div[2]/div[3]/article/div[1]"));  

... после чего я могу просто набрать: chapterElement.Text, чтобы узнать внутренний текст.

А другой - это другой div, на том же уровне, что и первый, xPath, который я только что скопировал из HTML (копировать весь xPath):

       IWebElement chapterElement = webDriver.FindElement(By.XPath("/html/body/div[3]/main/div[2]/div[3]/article/div[2]"));   

... и это не не получается, но текст также не копируется, текст "" (пустая строка).

Единственными различиями между двумя div являются:

  • последний сегмент в пути: div [1] и div [2].

  • второй div на самом деле скрыт от страницы (возможно, потому что ему не хватает класса "chapter_visible"), но он полностью отображается в html с Inspect!

Если это поможет, я скажу, что

"/html/body/div[3]/main/div[2]/div[3]/article/div[1]"

соответствует:

<div class="chapter chapter chapter_visible" data-chapterno="0" data-chapterid="5e8798266cee070006f5a3d1" style="display: block;">
    <h1>some text</h1>
    <div class="chapter__content"><p>some text</p>
<p>some text</p>
<p>some text</p>
<ul>
<li>some text</li>
<li>some text</li>
<li>some text.</li>
</ul></div>
</div>

и "/html/body/div[3]/main/div[2]/div[3]/article/div[2]" (второй xPath) соответствует следующее (как на том же уровне, что и первый):

<div class="chapter chapter" data-chapterno="1" data-chapterid="5e8798436cee070006f5a3d2">
    <h1>some text</h1>
    <div class="chapter__content"><p>some text</p>
<p><strong>some text</strong></p>
<p>some text.</p>
<p>some text</p>
<p>some text</p></div>
</div>

Это мой первый опыт игры с xPath, немного разочарованный, потому что я просто скопировал xPath, я даже не писал это вручную. Это должно было быть быстрым и простым, верно? Спасибо.

1 Ответ

1 голос
/ 03 мая 2020
IWebElement chapterElement = webDriver.FindElement(By.XPath("//div[@class='chapter chapter']"));

Можете ли вы попробовать это?

, если вы хотите get_attribute

IWebElement chapterElement = webDriver.FindElement(By.XPath("//div[@class='chapter chapter']")).GetAttribute("attribute_name");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...