2013-08-29 13 views
7

działa poprawnie zgodnie z oczekiwaniami, ale nie jestem pewien, dlaczego mój kod zwraca błąd wskaźnika zerowego. co tu jest nie tak?driver.executeScript() zwraca wyjątek NullPointerException dla prostego javascript

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

Co zwróci 'js.executeScript()'? Javadoc wyraźnie mówi "Jeden z Boolean, Long, String, List lub WebElement. Lub null ". –

+0

thats gdzie (ostatnia linia) jego błąd wyrzucania nullpointer – Sudhakar

Odpowiedz

11

Ten javascript

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

wywołuje metodę test() lecz nic z tego wyniku, czyli nie. nie zwraca go do dzwoniącego.

Więc

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

powróci null i starają się być dereferencjonowane który zawiedzie bo dereferencing null rzuca NullPointerException.

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

Może chcesz javascript

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

Działa to dla mnie

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

wypróbowany z twoją sugestią, wciąż nie działa – Sudhakar

+0

@Sudhakar Czy to się nie udało z 'ClassCastException'? Po prostu zmień typ swojej zmiennej. Ponieważ działa dla mnie. –

+0

Przepraszam, że wcześniej się myliłem. Tak, Twoja sugestia działa idealnie. Przeoczyłem ważny wiersz 'Jeden z Boolean, Long, String, List lub WebElement. Lub null ". Dziękuję za poświęcony czas. Doceniam to. – Sudhakar

0

Tak, kluczową sprawą jest, aby nie zapominać wstawić powrót, fe :

Long dateNow = (Long) jse.executeScript("return Date.now()"); 
Powiązane problemy