What about asynchronous scripts?
Everything that we have looked at so far has been a synchronous piece of JavaScript. However, what if we wanted to perform some asynchronous JavaScript calls as a part of our test? Well, we can do this. The JavascriptExecutor
also has a method called executeAsyncScript()
. This will allow you to run some JavaScript that does not respond instantly. Let's have a look at some examples.
First of all, we are going to write a very simple bit of JavaScript that will wait for 25 seconds before triggering a callback, as follows:
@Test private void javascriptExample() { driver.manage().timeouts().setScriptTimeout(60, TimeUnit.SECONDS); driver.executeAsyncScript("var callback = arguments[arguments.length - 1]; window.setTimeout(callback, 25000);"); driver.get("http://www.google.com"); }
Note that we defined a JavaScript variable named callback
, which uses a script argument that we have not set. For asynchronous scripts, Selenium needs to have a callback...