Как создать XPath, который удаляет текст из тега <br>? - PullRequest
1 голос
/ 30 сентября 2019

Я пытаюсь извлечь текст перед тегом <br>, используя XPath & Java. Я перепробовал несколько решений, но пока не повезло.

//div[@class="help-block"]/p[count(preceding-sibling::br) < 1]

Это мой HTML-код:

<div class="help-block">
    <p>
       This is sample text
       <br>
       Text after a breakpoint
    </p>
</div>

Ожидаемый результат: This is sample text.
Фактический результат: This is sample text Text after a breakpoint

Ответы [ 3 ]

0 голосов
/ 30 сентября 2019

Ваше выражение было близко. Но вы не учли, что p - это всего лишь один элемент, и вам нужны подузлы p. Поэтому измените ваше выражение на следующее (также избегая < char)

//div[@class="help-block"]/p/node()[count(preceding-sibling::br) &lt; 1]

Это вывод:

This is sample text
0 голосов
/ 30 сентября 2019

Чтобы получить This is sample text Индуцировать WebDiverWait И visibilityOfElementLocated() И получить элемент.

Индуцировать JavascriptExecutor И получить textContent из firstChild

WebDriverWait wait = new WebDriverWait(driver, 10); 
WebElement element=wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='help-block']/p")));
JavascriptExecutor js = (JavascriptExecutor) driver;  
System.out.println(js.executeScript("return arguments[0].firstChild.textContent;",element));
0 голосов
/ 30 сентября 2019

Я думаю, вы можете просто запустить это:

driver.find_element_by_xpath("//p[br]").text

Это получит элемент <p>, но запрос также проверяет, что <p> содержит <br> элемент внутри него. Таким образом, вы просто получаете <p>, а .text должен получить текст от <p>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...