Как очистить текст невидимого элемента в селене? - PullRequest
0 голосов
/ 19 марта 2019

В моей программе мне иногда нужно очистить текст от невидимого / скрытого веб-элемента. Я знаю, WebDriver обычно возвращает видимый текст, и что можно очистить скрытый / невидимый текст одним из следующих способов (как предложено в , этом и этом потоке в SO):

JavascriptExecutor js = (JavascriptExecutor) driver; 
scrapedText = js.executeScript ("return arguments[0].innerHTML", webElement).toString();

Или по телефону:

element.attribute('textContent')

element.attribute('innerText')

element.attribute('innerHTML')

Хотя оба эти решения работают, они будут извлекать текст, который не только невидим, но и обычно не идентифицируется с помощью метода getText(). Например, в следующем HTML:

<div class="a-section a-spacing-none">
<a id="brand" class="a-link-normal" href="/abc-d/b/ref=w_bl_sl_l_ap_ap_web_258XXX11?ie=UTF8&node=258XXX11&field-lbr_brands_browse-bin=abc+d">
<img id="brand" src="https://images-na.ssl-images-amazon.com/images/G/01/x-locale/brands/byline-logo/25xxx11._CB520xxx1_SR120,50_.jpg" alt=""/>
</a>
</div> 

textContent, innerText or innerHTML все вернет элемент <img, хотя я пытаюсь определить атрибут 'href' (используя XPath '//a[contains(@href, 'brands_browse-bin')]')

Другими словами, я пытаюсь создать универсальное решение, в котором моя программа всегда идентифицирует невидимые / скрытые элементы без идентификации дополнительных элементов, как при использовании textContent, innerText or innerHTML (в основном я хочу получить тот же результат, что и при вызове * 1028) * с только исключением, что он включает скрытые элементы)

Возможно ли это?

Спасибо

Обновление:

Если вы перейдете к: https://www.amazon.com/dp/B01H4LBIVC и попытаетесь очистить «цену» (например, с помощью .//*[@id='priceblock_ourprice']), она не будет работать, так как элемент не виден (я знаю, я мог бы сделать его видимым с помощью нажав «Однократная покупка»). Если бы я решил получить элемент с помощью одного из методов, перечисленных выше - я смог бы получить цену, но она также получит неправильное значение в приведенном выше примере HTML. Если есть метод, который идентифицирует скрытые элементы (аналогично getText()), но не включает автоматически «innerHTML» и т. Д., Эта проблема не будет присутствовать. Короче говоря, мне нужно универсальное решение, которое определит «цену» (которая скрыта в приведенном выше примере), а также определит правильный элемент в приведенном выше фрагменте HTML.

1 Ответ

0 голосов
/ 19 марта 2019

В приведенном вами примере получения цены из продукта Amazon все три параметра будут возвращать одно и то же значение, поскольку внутри элемента нет ничего, кроме текста.

<span id="priceblock_ourprice" class="a-size-medium a-color-price">$26.99</span>

Разница между этими тремя вариантами возникает, когда внутри есть форматирование или другие элементы HTML. Например, если вы используете .innerHTML в приведенном примере HTML ниже

<span id="priceblock_ourprice" class="a-size-medium a-color-price"><strong>$26.99</strong></span>

Возвращается <strong>$26.99</strong> вместо $26.99.

Самый простой вариант (и тот, который вам нужен) - всегда использовать .textContent. Он будет возвращать только содержащийся текст (но не теги HTML и т. Д.). В этот момент вы должны правильно указать локатор, чтобы найти элемент, содержащий нужный текст.

Существует более подробное объяснение разницы между тремя (и другими, не упомянутыми), если вы хотите получить более подробную информацию в этом ответе .

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