Трудно знать, как ответить на ваш вопрос без более подробной информации, на странице есть несколько элементов, которые имеют количество зачеркнутых / не просчитанных сумм.
Для общего решения вы можете использовать следующее: оно будет соответствовать нескольким блокам, которые имеют цены. Если вы хотите что-то более целенаправленное, вам понадобится немного более сложный локатор, который определяет товар, а также ценовой блок. Если вы просто хотите первый ценовой блок на странице, это будет работать, хотя:
//*[contains(@class,'price')]
Это то же самое, что следующий CSS-селектор (который гораздо менее сложен)
.price
Как бы то ни было, наценка вызовет у вас проблему, она выглядит так:
<div class="col-md-3 col-sm-4 price">
<del style="font-size:15px;color:#aaa">$ 85.00</del>
<br>
$ 20.00
</div>
В строгом XPath вы можете сделать это, используя XPath вроде:
//*[contains(@class,'price')]/text()
Однако Selenium не позволяет вам связывать текстовый узел с WebElement. Это означает, что хотя вышеуказанный Xpath будет работать непосредственно в браузере, он не будет работать как локатор для поиска WebElement (поскольку он не находит элемент, он находит текстовый узел).
Лучший способ это исправить - поднять ошибку и заставить разработчика поместить сумму, которая не была пробита, в свой собственный элемент (например, обернуть его <span>
).
В качестве хакерского обходного пути вы можете попробовать получить внутренний HTML-код элемента следующим образом:
WebElement price = driver.findElement(By.cssSelector(".price"));
String elementHTML = price.getAttribute("innerHTML");
Элемент StringHTML будет содержать следующее:
<del style="font-size:15px;color:#aaa">$ 85.00</del>
<br>
$ 20.00
Затем вам нужно будет проанализировать строку, чтобы убрать первые две строки (хотя это не очень хорошее и надежное решение).