如何使用Selenium从JavaScript返回值?
问题描述:
答
我追加到使用要返回的值(.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");
答
您可以只返回在executeJavascript值:
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("return document.title");
答
如果要执行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)
答
对于异步我用下面的:
driver.executeAsyncScript(“\
var callback = arguments[0]; \
$.ajax(‘someurl’) \
.success(function(data){callbacks(data)});\
“);
感谢@Jochen,但我在得到一个值在window.addEventListener('click',函数(e){return e},false)上的JS文件;'我想要**事件e **。 –
谢谢@Jochen这帮助。 –