繁体   English   中英

Java Selenium JavaScript执行程序返回空数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM