如何使用Selenium WebDriver从隐藏元素中读取文本?

时间:2012-10-24 10:09:19

标签: java selenium-webdriver hidden-field

我正在尝试从隐藏的1000中读取示例字符串<div>,如下所示:

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

我知道WebElement.getText()对Selenium 2(WebDriver)中的隐藏元素不起作用,所以我搜索了解决方案(like this one),显然以下代码应该有效:

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 个答案:

答案 0 :(得分:60)

也可能有用:

在某些情况下,人们可能会发现隐藏文字很有用,可以通过调用{textContentinnerTextinnerHTML属性来检索隐藏文字。 {1}}。

element.attribute('attributeName')为我工作。

在那里查看更多详细信息 - &gt; http://yizeng.me/2014/04/08/get-text-from-hidden-elements-using-selenium-webdriver/

答案 1 :(得分:23)

编辑:哦,这有效。

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

在Firefox中。

这样做。

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

我也试过但它似乎不适用于纯Javascript。用启动浏览器 这里提到的Jquery。 How to use JQuery in Selenium?并使用以下代码编写脚本。

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

这很有效。

答案 2 :(得分:6)

在已经给出的答案的基础上,我创建了这个实用程序方法(Java)。也许这对其他人有帮助。

public static String getText(WebDriver driver, WebElement element){
    return (String) ((JavascriptExecutor) driver).executeScript(
        "return jQuery(arguments[0]).text();", element);
}
  • 我使用jQuery's text()仅提取文本节点。 innerHTML也会为你提供HTML标签。
  • 我使用jQuery代替$ noConflict
  • 不操纵元素或其可见性

答案 3 :(得分:1)

试试这个

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

答案 4 :(得分:0)

我遇到了读取不可见元素的相同问题,但我想要一个WebElement对象来进行进一步的解析(而不仅仅是它的文本)。

这段代码满足了我的要求。

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

答案 5 :(得分:0)

我对Selenium(以及整个编程)相对较新,但我只是在分享一个对我有用的解决方案。

Selenium 2并非设计用于直接处理具有隐藏可见性的元素。例如,您将无法找到它的ID或CSS选择器。

我遇到机器人的情况,我有一个包含大量itens的HTML表格,当点击它们时,会打开隐藏可见性的下拉列表。它甚至在另一个框架中。

这是一个特定的情况,但是我找不到任何解决方案,所以我选择了这个(坏的),但是尽管代码很丑陋,但它确实能够保持一致。

首先,您应该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><table>容器下列表中的元素”。

它适用于Chrome和Firefox,但不适用于任何无头浏览器,不确定原因。如果你们遇到类似的东西,并有一个更优雅的解决方案(可能没那么难找到它),请分享!

答案 6 :(得分:0)

我建议使用:

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

答案 7 :(得分:-1)

type='hidden'

当我们遇到任何此类情况时,我们首先要做的是尝试在该页面上不做任何更改的任何操作,如拖动等,然后进行帧切换。

尝试使用getText(),如果不起作用,请尝试以上作为第二种选择。