【问题标题】:driver.executeScript() returns NullPointerException for simple javascriptdriver.executeScript() 为简单的 javascript 返回 NullPointerException
【发布时间】:2013-08-29 21:01:33
【问题描述】:

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

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

【问题讨论】:

  • js.executeScript() 返回什么? Javadoc 清楚地写着One of Boolean, Long, String, List or WebElement. Or null.
  • 这就是(最后一行)它抛出空指针错误的地方

标签: java selenium webdriver selenium-webdriver


【解决方案1】:

这个javascript

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

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

所以

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

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

JavadocJavascriptExecutor.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);

【讨论】:

  • @Sudhakar 它是否因ClassCastException 而失败?只需更改变量的类型。因为它对我有用。
  • 对不起,我之前错了。是的,您的建议非常有效。我忽略了重要的一行One of Boolean, Long, String, List or WebElement. Or null。感谢您的时间。欣赏它。
【解决方案2】:

是的,关键是不要忘记插入return,f.e.:

Long dateNow = (Long) jse.executeScript("return Date.now()");

【讨论】:

  • 是的,丢失的回报对我来说是造成它的原因
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-16
  • 2021-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多