[英]Java selenium javascript executor returning empty array
我正在尝试运行编写的JavaScript函数,以通过xpath(requirement)收集HTML站点的所有注释。
粘贴在浏览器中的功能,ofc。 没有'return'语句,效果很好。
但是,当通过硒' javascriptexecutor '执行时,它将返回一个空数组。
我知道您必须将javascript语句放入“ code ” +形式,但是为了便于阅读,我将代码格式化如下。
我希望有人可以帮助我:)
ChromeDriver driver = new ChromeDriver();
String url = "AprivateSamplePage";
driver.get(url);
JavascriptExecutor js = (JavascriptExecutor) driver;
String text = (String) js.executeScript("return nodes =[];
xPathResult=document.evaluate('//comment()',document,null,XPathResult.ANY_TYPE, null);
nodes =[];
node = xPathResult.iterateNext();
while (node) {nodes.push(node.textContent);
node = xPathResult.iterateNext();}nodes;").toString();
System.out.print(text);
和输出看起来像这样:
Only local connections are allowed.
Okt 30, 2018 8:56:07 AM org.openqa.selenium.remote.ProtocolHandshake createSession
INFORMATION: Detected dialect: OSS
[]
Process finished with exit code 0
您正在执行脚本js.executeScript("return nodes =[];");
只要。 在该return语句之后,脚本的其余部分将被忽略。 因此,您收到一个空数组。
关于executeScript(String)
javaDoc文档,您的脚本代码被包装并作为匿名函数的主体执行,如下所示:
function f() {
return nodes = [];
xPathResult = document.evaluate('//comment()', document, null, XPathResult.ANY_TYPE, null);
nodes = [];
node = xPathResult.iterateNext();
while (node) {
nodes.push(node.textContent);
node = xPathResult.iterateNext();
}
nodes;
}();
如您所知,每个脚本语句都以“;”分隔。 由于第一个语句是return
语句,因此函数在此结束并返回空数组作为结果。
在您的浏览器控制台中,该脚本可以按预期工作,因为它不会在return语句处停止,而是打印出finale语句的nodes;
值。
您应该将返回值从第一条语句移到最后一条语句:
xPathResult = document.evaluate('//comment()', document, null, XPathResult.ANY_TYPE, null);
nodes = [];
node = xPathResult.iterateNext();
while (node) {
nodes.push(node.textContent);
node = xPathResult.iterateNext();
}
return nodes;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.