 <p>In simple terms </p> <p><em><strong>executeAsyncScript</em></strong> -> This method doesn't block the execution of next line of code...till execution of this method is completed. This method will execute as well as next line of code will be executed...asynchronously. (without blocking each other)</p> <p><em><strong>executeScript</em></strong> -> This method will block the execution till it's execution is completed and then it moves to next line of code. In short your automation code will halt till the Javascript is executed via this method.</p> <p>Here is a small piece of example...which you can try...Though it's written in C# (please modify for Java Compatibility) </p> <pre><code> IWebDriver driver= new InternetExplorerDriver(); driver.Navigate().GoToUrl("http://www.google.com"); IJavaScriptExecutor js = (IJavaScriptExecutor) driver; Console.WriteLine("Entering the Async Call"); driver.Manage().Timeouts().SetScriptTimeout(new TimeSpan(0,0,4)); js.ExecuteAsyncScript("setInterval(function(){ alert('Hello');},3000); callback();"); Console.WriteLine("Exiting the Async Call"); Console.WriteLine("Entering the Sync Call"); Console.WriteLine(js.ExecuteScript("return document.title")); Console.WriteLine("Exiting the Sync Call"); Console.ReadLine(); driver.Close(); driver.Quit(); </code></pre> <p>By running the above example , you will find that Javascript code in <strong><em>executeAsyncScript</em></strong> will run after the complete automation code is executed. Hence the Alert window with "hello" text will appear at later stages of execution (when the <strong><em>executeScript</em></strong> is executed)</p> <p>But where as the code in <strong><em>executeScript</em></strong> will run by blocking the following line of code.</p> <pre><code>Console.WriteLine("Exiting the Sync Call"); </code></pre> <p>Hence you will see output "Google" between the lines</p> <blockquote> <p>Entering the Sync Call</p> <p>Google</p> <p>Exiting the Sync Call</p> </blockquote> <p>I hope this helps..All the best :) </p>