Java 如何使用Selenium WebDriver从隐藏元素读取文本?
我试图从隐藏的Java 如何使用Selenium WebDriver从隐藏元素读取文本?,java,selenium-webdriver,hidden-field,Java,Selenium Webdriver,Hidden Field,我试图从隐藏的中读取示例字符串1000,如下所示: <div id="hidden_div" style="visibility:hidden">1000</div> 但是它对我不起作用,变量n总是以null结束。我做错了什么?编辑:哦,这很有效 String script = "return document.getElementById('hidden_div').innerHTML"; 在firefox中 这也一样 String script = "return
中读取示例字符串1000
,如下所示:
<div id="hidden_div" style="visibility:hidden">1000</div>
但是它对我不起作用,变量n
总是以null
结束。我做错了什么?编辑:哦,这很有效
String script = "return document.getElementById('hidden_div').innerHTML";
在firefox中
这也一样
String script = "return arguments[0].innerHTML";
我也尝试过,但它似乎不能与纯Javascript一起工作。以启动浏览器
这里提到的Jquery。并对脚本使用以下代码
String script = "return $('#hidden_div').text();";
这是可行的。我遇到了读取不可见元素的相同问题,但我希望返回一个WebElement对象来做进一步的解析(不仅仅是它的文本)
String script = "return document.getElementById('hidden_div').innerHTML";
这段代码满足了我的要求
(WebElement) ((JavascriptExecutor) driver).executeScript(
"arguments[0].style[\"display\"] = \"block\";"+
"arguments[0].style[\"visibility\"] = \"visible\";"+
"return arguments[0];",
element);
在已经给出答案的基础上,我创建了这个实用方法(Java)。也许这对其他人有帮助
public static String getText(WebDriver driver, WebElement element){
return (String) ((JavascriptExecutor) driver).executeScript(
"return jQuery(arguments[0]).text();", element);
}
- 我仅用于提取文本节点。innerHTML也会为您提供HTML标记
- 我使用jQuery而不是$
- 不要操纵图元或其可见性
- 也可能有用:
在某些情况下,可以通过调用
element.attributeName('attributeName')
从元素的textContent
、innerText
或innerHTML
属性中检索隐藏的文本
element.getAttribute(“textContent”)
对我有用
查看更多详细信息->
我对Selenium(以及整个编程)比较陌生,但我只是分享一个适合我的解决方案
Selenium 2不是为直接处理具有隐藏可见性的元素而设计的。例如,您将无法找到它的ID或CSS选择器
我有一个机器人的情况,我有一个HTML表格和许多iTen,当点击其中的一个时,一个隐藏可见性的下拉列表打开了。甚至在另一个画面中
这是一个特定的情况,但我找不到任何解决方案,所以我选择了这个(糟糕的)方案,但它的效果非常一致,尽管代码很难看
首先,您应该switchToDesiredFrame()代码>-在此处输入您的驱动程序.switchTo.frame()
逻辑
比:
WebElement table=driver.findElements(按.tagName(“table”)).get(索引_1);
列表数据单元=table.findElements(按.tagName(“td”);
WebElement spceificDataCellIWanted=dataCells.get(索引2);
System.out.println(spceificDataCellIWanted.getText());
数据单元实际上是
标记,它们成为列表中的WebElements
,就像
是
容器下列表中的元素一样
它在Chrome和Firefox上对我有效,但在任何无头浏览器上都不起作用,不知道确切原因。如果你们遇到这样的事情,并且有一个更优雅的解决方案(可能不难找到),请分享 试试这个
WebElement hiddenElement = GET YOUR ELEMENT HERE;
String hiddenContent= hiddenElement.getAttribute("textContent");
当我们遇到任何这样的情况时,我们应该做的第一件事是尝试任何不会对页面进行任何更改的操作,如拖动等,然后进行帧切换
尝试一个getText()
,如果这不起作用,请尝试上面的第二种方法 我建议使用:
JavascriptExecutor js = (JavascriptExecutor)hiddenDiv;
String n=(String) js.executeScript("return document.getElementById('hidden_div').value;");
System.out.println(n);
根据Selenium WebDriver常见问题解答:“为什么不可能与隐藏元素交互?答:由于用户无法读取隐藏元素中的文本,WebDriver也不允许访问它。但是,可以使用Javascript执行功能直接从元素调用getText…”我最终也使用了jQuery,因为我的应用程序是基于jQuery构建的。不确定我是否同意FAQ中表达的这一决定背后的理由,但至少有一种方法可以获取隐藏文本。在旧的Selenium版本(至少2.25)中,可以获取隐藏元素的文本。在较新版本(至少2.39)中,getText()
如果元素不可见,则返回空字符串。这两种情况下都不同于与隐藏元素交互时的行为。如果你尝试执行click()
或sendKeys(…)
你会得到一个ElementNotVisibleException。为了完整起见:WebDriver常见问题解答可以在下面阅读。我如何在python
selenium?@TimBü谢谢,这解释了一个旧测试失败的原因:)哇,这就是答案!我正准备在上面接受的答案中使用javascript,但尝试了这个,效果非常好。更干净的.element.getAttribute(“textContent”).trim()正好满足了我的需要。回答得好!我使用innerText比使用textContent更幸运,因为innerText将多个换行符和空格合并到一个空格中,而textContent没有。非常感谢:)这似乎与用户3152984的答案没有任何不同
type='hidden'
JavascriptExecutor js = (JavascriptExecutor)hiddenDiv;
String n=(String) js.executeScript("return document.getElementById('hidden_div').value;");
System.out.println(n);