簡體   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