48

我正在尝试从这样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. 我究竟做错了什么?

4

8 回答 8

99

也可能有用:

在某些情况下,人们可能会发现获取隐藏文本很有用,可以通过调用从元素的textContentinnerText属性innerHTML中检索到element.attribute('attributeName')

element.getAttribute("textContent")为我工作。

在那里查看更多细节-> http://yizeng.me/2014/04/08/get-text-from-hidden-elements-using-selenium-webdriver/

于 2015-09-09T09:13:12.547 回答
27

编辑:哦,这行得通。

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

在火狐中。

这也是如此。

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

我也尝试过,但它似乎不适用于纯 Javascript。如此处所述,使用 Jquery 启动浏览器。如何在 Selenium 中使用 JQuery?并使用以下代码编写脚本。

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

这行得通。

于 2012-10-24T10:58:28.617 回答
7

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

public static String getText(WebDriver driver, WebElement element){
    return (String) ((JavascriptExecutor) driver).executeScript(
        "return jQuery(arguments[0]).text();", element);
}
  • 我只使用jQuery 的 text()来提取文本节点。innerHTML 也会给你 HTML 标签。
  • 在没有冲突的情况下,我使用 jQuery 而不是 $
  • 不要操纵元素或其可见性
于 2014-02-10T17:01:00.100 回答
1

试试这个

        WebElement hiddenElement  = GET YOUR ELEMENT HERE;
        String hiddenContent= hiddenElement.getAttribute("textContent");
于 2017-07-17T17:27:06.080 回答
1

我建议使用:

JavascriptExecutor js = (JavascriptExecutor)hiddenDiv;
String n=(String) js.executeScript("return document.getElementById('hidden_div').value;");
System.out.println(n);
于 2018-09-05T19:58:10.203 回答
0

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

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

(WebElement) ((JavascriptExecutor) driver).executeScript(
    "arguments[0].style[\"display\"] = \"block\";"+
    "arguments[0].style[\"visibility\"] = \"visible\";"+
    "return arguments[0];", 
element);
于 2013-06-27T13:39:28.970 回答
0

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

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

我遇到了一个机器人的情况,我有一个包含很多元素的 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一个列表,就像's 是“容器”<td>下的列表中的元素一样。<table>

它适用于我的 Chrome 和 Firefox,但不适用于任何无头浏览器,不知道具体原因。如果你们遇到类似的事情并且有更优雅的解决方案(可能不那么难找到),请分享!

于 2017-04-13T17:28:56.430 回答
-2
type='hidden'

当我们遇到任何这种情况时,我们应该做的第一件事是尝试任何对该页面没有任何更改的操作,例如拖动等,然后进行框架切换。

尝试 a getText(),如果这不起作用,请尝试上述方法作为第二种选择。

于 2018-02-27T12:35:02.820 回答