我试图从隐藏的1000
中读取示例String <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
结束。我究竟做错了什么?
编辑:哦,这工作。
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();";
这有效。
也可能有用:
在某些情况下,人们可能会发现隐藏文本很有用,可以通过调用textContent
从元素的innerText
,innerHTML
或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);
}
试试这个
WebElement hiddenElement = GET YOUR ELEMENT HERE;
String hiddenContent= hiddenElement.getAttribute("textContent");
我遇到了读取不可见元素的相同问题,但我想要一个WebElement对象来进行进一步的解析(而不仅仅是它的文本)。
这段代码满足了我的要求。
(WebElement) ((JavascriptExecutor) driver).executeScript(
"arguments[0].style[\"display\"] = \"block\";"+
"arguments[0].style[\"visibility\"] = \"visible\";"+
"return arguments[0];",
element);
我对Selenium(以及整个编程)相对较新,但我只是在分享一个对我有用的解决方案。
Selenium 2并非设计用于直接处理具有隐藏可见性的元素。例如,您将无法找到它的ID或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>
是<table>
“容器”下的列表中的元素一样。
它适用于Chrome和Firefox,但不适用于任何无头浏览器,不确定原因。如果你们遇到类似的东西,并有一个更优雅的解决方案(可能没那么难找到它),请分享!
我建议使用:
JavascriptExecutor js = (JavascriptExecutor)hiddenDiv;
String n=(String) js.executeScript("return document.getElementById('hidden_div').value;");
System.out.println(n);
type='hidden'
当我们遇到任何这样的情况时,我们首先要做的是尝试任何不对该页面进行任何更改的操作,如拖动等,然后进行帧切换。
尝试使用getText()
,如果不起作用,请尝试以上作为第二种选择。