как получить текст из скрытой строки html с помощью selenium webdriver java [duplicate]

Это не прямой ответ на вопрос (его не о Actions), но он также позволяет легко прокручивать требуемый элемент:

element = driver.find_element_by_id('some_id')
element.location_once_scrolled_into_view

Это на самом деле намерено вернуть вам координаты (x, y) элемента на странице, но также прокрутите вниз до целевого элемента

28
задан dokaspar 24 October 2012 в 11:09
поделиться

7 ответов

EDIT: О, это работает.

String script = "return document.getElementById('hidden_div').innerHTML";

В firefox.

И это тоже.

String script = "return arguments[0].innerHTML";

Я тоже попытался, но это похоже, не работает с чистым Javascript. Запустите браузер с JQuery, как упоминалось здесь. Как использовать JQuery в Selenium? и использовать следующий код для скрипта.

String script = "return $('#hidden_div').text();";

Это работает.

22
ответ дан Community 28 August 2018 в 00:41
поделиться

Попробуйте

        WebElement hiddenElement  = GET YOUR ELEMENT HERE;
        String hiddenContent= hiddenElement.getAttribute("textContent");
0
ответ дан Abhigyan 28 August 2018 в 00:41
поделиться
type='hidden'

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

Попробуйте getText(), если это не сработает, попробуйте приведенное выше в качестве второго варианта.

-1
ответ дан Leonardo Alves Machado 28 August 2018 в 00:41
поделиться

Я относительно новичок в Selenium (и для программирования в целом), но я просто использую решение, которое сработало для меня.

Selenium 2 не был разработан для непосредственного управления элементами со скрытой видимостью. Например, вы не сможете найти его ID или CSS-селектор.

У меня была ситуация с ботом, где у меня была таблица HTML с большим количеством иены, и при нажатии, когда из них выпадало раскрывающееся меню со скрытой видимостью. Это было даже в другом фрейме.

Это конкретная ситуация, но я не мог найти никакого решения, поэтому я выбрал этот (плохой), но это работает действительно последовательно, несмотря на уродливый код.

Сначала вы должны switchToDesiredFrame(); - ввести логику driver.switchTo.frame() здесь.

Than:

WebElement table = driver.findElements(By.tagName("table")).get(index_1);

List<WebElement> dataCells= table .findElements(By.tagName("td"));

WebElement spceificDataCellIWanted = dataCells.get(index_2);

System.out.println(spceificDataCellIWanted.getText());

DataCells являются буквально тегами <td>, и они становятся WebElements в списке, так как <td> - это элементы в список под контейнером <table>.

Он работал на Chrome и Firefox для меня, но не в любом браузере без браузера, не совсем точно, почему. Если вы, ребята, сталкиваетесь с чем-то подобным и имеете более элегантное решение (возможно, не так сложно его найти), пожалуйста, поделитесь!

0
ответ дан Phan Van Linh 28 August 2018 в 00:41
поделиться

Я столкнулся с той же проблемой чтения невидимых элементов, но мне хотелось вернуть объект WebElement для дальнейшего разбора (а не только его текста).

Этот бит кода выполнил мое требование.

(WebElement) ((JavascriptExecutor) driver).executeScript(
    "arguments[0].style[\"display\"] = \"block\";"+
    "arguments[0].style[\"visibility\"] = \"visible\";"+
    "return arguments[0];", 
element);
0
ответ дан prav 28 August 2018 в 00:41
поделиться

Основываясь на работе уже предоставленных ответов, я создал этот метод утилиты (Java). Возможно, это полезно для кого-то другого.

public static String getText(WebDriver driver, WebElement element){
    return (String) ((JavascriptExecutor) driver).executeScript(
        "return jQuery(arguments[0]).text();", element);
}
  • Я использую текст jQuery () для извлечения только текстовых узлов. innerHTML также даст вам HTML-теги.
  • Я использую jQuery вместо $ в случае noConflict
  • не манипулирует элементом или его видимостью
6
ответ дан Tim Büthe 28 August 2018 в 00:41
поделиться

Может быть полезно также:

В некоторых случаях может оказаться полезным получить скрытый текст, который можно извлечь из атрибута textContent, innerText или innerHTML элемента, вызвав element.attribute('attributeName').

element.getAttribute("textContent") работал для меня.

Подробнее см. там -> http://yizeng.me/2014/04/08/ получить-текст-из-скрытых элементов, используя селенистые-WebDriver /

44
ответ дан Vince Bowdren 28 August 2018 в 00:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: