Как читать текст скрытый элемент с WebDriver селен?

Я пытаюсь прочитать строку примера 1000 из скрытой <div> такой:

<div id="hidden_div" style="visibility:hidden">1000</div>

Я знаю, что WebElement.getText() не работает со скрытыми элементами в Selenium 2 (WebDriver), поэтому я искал решения (как это) и, по-видимому, следующий код должен работать:

WebElement hiddenDiv = seleniumDriver.findElement(By.id("hidden_div"));
String n = hiddenDiv.getText(); // does not work (returns "" as expected)
String script = "return arguments[0].innerText";
n = (String) ((JavascriptExecutor) driver).executeScript(script, hiddenDiv);

но это не работает для меня, переменной n всегда заканчивается как null. Что я делаю не так?

8 ответов


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

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

в firefox.

и это тоже.

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

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

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

это работает.


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

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

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

Подробнее см. Там -> http://yizeng.me/2014/04/08/get-text-from-hidden-elements-using-selenium-webdriver/


основываясь на работе уже данных ответов, я создал этот метод утилиты (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
  • не манипулируйте элементом, или это видимость

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

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

(WebElement) ((JavascriptExecutor) driver).executeScript(
    "arguments[0].style[\"display\"] = \"block\";"+
    "arguments[0].style[\"visibility\"] = \"visible\";"+
    "return arguments[0];", 
element);

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

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

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

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

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

чем:

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>'s являются элементами в списке под <table> "контейнер".

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


попробуй такое

        WebElement hiddenElement  = GET YOUR ELEMENT HERE;
        String hiddenContent= hiddenElement.getAttribute("textContent");

Я рекомендую использовать:

JavascriptExecutor js = (JavascriptExecutor)hiddenDiv;
String n=(String) js.executeScript("return document.getElementById('hidden_div').value;");
System.out.println(n);

type='hidden'

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

попробовать getText(), если это не сработает, попробуйте, как 2-й вариант.