2016-11-22 101 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)});\ 
「);