Selenium C #: как получить тексты после тегов

#c# #selenium-webdriver #xpath #selenium-chromedriver

#c# #selenium-webdriver #xpath #selenium-chromedriver

Вопрос:

Я видел другие сообщения о получении текстов после тегов br, но ни одно из них не помогло мне получить текст с моей веб-страницы.

Вот фрагмент html, из которого я пытаюсь получить текст:

 .....
<div class="col-md6">
 <ul`enter code here`>
  <p>
    <strong>Rates</strong>
    <br>
     "0.29C/wh 1-Year Fixed"
    <br>
     "0.39C/wh 2-Year Fixed"
    <br>
     "0.59C/wh 3-year Fixed"
    <br>
   </p>
   <p>....</p>
  </ul>
 </div>
  

Я попробовал следующий XPath, чтобы получить текстовый элемент первого тега br, содержащий 0,29C:

 "//*[@id='WebPartWPQ2']/div[1]/div[1]/div[2]/div/div[1]/ul/p[1]/br[1]"
  

Но, когда я кодирую следующее в C # и Selenium, я получаю нулевой возврат для текста:

 var productRateElement = Driver.driver.FindElement(By.XPath("/ [@id='WebPartWPQ2']/div[1]/div[1]/div[2]/div/div[1]/ul/p[1]/br[1]"));

var productRateText = productRateElement.Text;
   
  

В браузере Chrome я могу использовать тот же XPath и могу найти текстовый элемент после первого тега br, но в коде C # он возвращает null .

Надеясь получить обратную связь, как решить эту проблему.

Ответ №1:

Вы можете попробовать эти выражения XPath-1.0:

 //div/ul/p/strong/following-sibling::br[1]/following-sibling::text()[1]
  

или со всем путем

 //*[@id='WebPartWPQ2']/div[1]/div[1]/div[2]/div/div[1]/ul/p/strong/following-sibling::br[1]/following-sibling::text()[1]
  

Комментарии:

1. Спасибо за отзыв zx485. Используя весь путь, я получаю следующую ошибку в коде C #: «{«недопустимый селектор: результат выражения xpath «//*[@id= ‘WebPartWPQ2’]/div[1]/ div[1] / div[2]/div / div[1]/ul/p/strong/following-sibling::br[1]/following-sibling::text()[1]» — это: [текст объекта]. Это должен быть элемент.n »

2. ДА. Результатом является text() узел, а не элемент. Проблема в том, что (родительский) элемент желаемого содержимого <p> содержит все текстовые узлы ( и <br> элементы). Таким образом, вы можете использовать //div/ul/p для получения элемента, но вам нужно разделить текст в соответствии с вашими требованиями (здесь это, вероятно, будет вторая строка).

3. Спасибо, zx485. Вы правы. Нацеливание на последний тег p возвращает все тексты под ним. Я буду работать с этой строкой и попытаюсь ее разделить.