9

js.executeScript("return document.title")按预期工作正常,但我不确定为什么我的代码返回空指针错误。这里有什么问题?

   String testJs= "function test() {arr = 111; return arr;}; test();";
   JavascriptExecutor js = (JavascriptExecutor) driver;
   int a = (Integer) js.executeScript(testJS);
4

2 回答 2

14

这个 javascript

function test() {arr = 111; return arr;}; 
test();

调用方法test()但不对结果做任何事情,即。不会将其返回给调用者。

所以

int a = (Integer) js.executeScript(testJS);

将返回null并尝试取消引用,这将失败,因为取消引用nullthrows NullPointerException

Javadoc用于JavascriptExecutor.html#executeScript(java.lang.String, java.lang.Object...)

也许你想要 javascript

function test() {arr = 111; return arr;}; 
return test();

这对我有用

System.setProperty("webdriver.chrome.driver", "C:\\Users\\me\\Downloads\\chromedriver.exe");
ChromeDriver driver = new ChromeDriver();
JavascriptExecutor executor = (JavascriptExecutor) driver;
String js = "function test() {" +
            "arr = 111; return arr;" +
            "}; return test()";
Long a = (Long) executor.executeScript(js);
System.out.println(a);
于 2013-08-29T21:04:02.463 回答
2

是的,关键是不要忘记插入返回,fe:

Long dateNow = (Long) jse.executeScript("return Date.now()");
于 2017-12-04T15:31:31.183 回答