2013-08-29 1 views
7

js.executeScript("return document.title")은 예상대로 작동하지만 내 코드가 null 포인터 오류를 반환하는 이유가 확실하지 않습니다. 여기서 뭐가 잘못 됐니?driver.executeScript()는 간단한 자바 스크립트 인 NullPointerException을 반환합니다.

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

'js.executeScript()'는 무엇을 반환합니까? Javadoc은 Boolean, Long, String, List 또는 WebElement 중 하나를 명확하게 말합니다. 아니면 널. " –

+0

thats (마지막 줄) throwing nullpointer 오류 – Sudhakar

답변

11

이 자바 스크립트

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

는 방법 test()를 호출하지만, 즉 결과, 아무것도하지 않습니다. 호출자에게 반환하지 않습니다.

그래서

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

null을 반환하고 null를 역 참조하는 NullPointerException을 발생하기 때문에 실패하는 역 참조하려고합니다. JavascriptExecutor.html#executeScript(java.lang.String, java.lang.Object...)

에 대한

Javadoc은 아마 당신은 자바 스크립트이 나를

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); 
+0

이 제안을 시도했지만 여전히 작동하지 않습니다. – Sudhakar

+0

@Sudhakar 'ClassCastException'과 함께 실패 했습니까? 변수 유형을 변경하기 만하면됩니다. 그것은 나를 위해 작동하기 때문에. –

+0

죄송합니다. 전에 틀 렸습니다. 네 제안은 완벽하게 작동합니다. 나는 중요한 행'Boolean, Long, String, List 또는 WebElement 중 하나를 간과했다. 또는 null'. 감사합니다. 고맙습니다. – Sudhakar

0

네, 중요한 건이 반환, 철을 삽입 잊지되지 작동

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

에게 원하는 :

Long dateNow = (Long) jse.executeScript("return Date.now()"); 
관련 문제