我正在尝试从隐藏的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
结尾。我做错了什么?
答案 0 :(得分:60)
也可能有用:
在某些情况下,人们可能会发现隐藏文字很有用,可以通过调用{textContent
,innerText
或innerHTML
属性来检索隐藏文字。 {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);
}
答案 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()
,如果不起作用,请尝试以上作为第二种选择。