2016-11-22 99 views

回答

4

我追加到使用要返回的值(.js文件)


document.body.innerHTML += '<div style="display:none;" id="some_id">' + value_to_be_returned + '</div>';


并在java中使用(in .ja VA文件)


String return_value = (String) js.executeScript("return document.getElementById('some_id').innerHTML");

5

您可以只返回在executeJavascript值:

JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("return document.title");

+0

感谢@Jochen,但我在得到一个值在window.addEventListener('click',函数(e){return e},false)上的JS文件;'我想要**事件e **。 –

+0

谢谢@Jochen这帮助。 –

-2

如果要执行JavaScript是同步的,则JavaScript的返回值将被分配driver.execute_script()方法的结果 - 这可能是你所期待的,并遵循least surprise principle

js_url = driver.execute_script("return window.location.href") 
print(js_url) 

如果,另一方面,你的JavaScript代码是异步的,然后在回调你可以分配结果window对象,请等待一些预定义的时间(例如,对于AJAX reguest完成),然后从全局变量的js读取结果:

driver.execute_script("""$.ajax({ 
       url: 'http://httpbin.org/get', 
       complete: function(xhr, textStatus) { 
        window._xhr_status = xhr.status; 
       } 
      }); 
     """ % asset_url) 

time.sleep(5) 

js_status = driver.execute_script('return window._xhr_status') 
print(js_status) 
0

对于异步我用下面的:

driver.executeAsyncScript(“\ 
var callback = arguments[0]; \ 
$.ajax(‘someurl’) \ 
.success(function(data){callbacks(data)});\ 
“);