Sleep in Selenium


    Sleep in Selenium



    I. Waits in Selenium

    Wait is the process of matching the speed of action and reaction, selenium does the action, and web application shows the reaction.

    Example: Click Login button gmail login (selenium does this action) web application navigates to the inbox(reaction)

    public class Example
    {
    	public static void main(String[] args)
    	{
    		//open firefox browser
    		WebDriver driver=new ChromeDriver();
    		//goto gmail.com
    		driver.get("https://www.gmail.com");
    		//enter text in username
    		driver.findElement(By.xpath("//*[@id='email' type='email'   ]")).sendKeys("username");
    		//enter text in password
    		driver.findElement(By.xpath("//*[@id='Passwd']")).sendKeys("password");
    		//click on the signin button
    		driver.findElement(By.xpath("//*[@id='signIn']")).click();
    		//click on the compose button
    		driver.findElement(By.cssSelector("div[class='T-I J-J5-Ji T-I-KE L3']")).click();
    	}
    }

    If you run the above program, you might face "NoSuchElementException" Exception because selenium starts searching for the compose button immediately after clicking on the SignIn button; it waits for few milliseconds, but usually, gmail takes 3 to 4 second to open so selenium will not able to find it.

    In most of the cases, the selenium does the action in micro or milliseconds, but the application takes time in seconds.

    At the same time, selenium will not wait till it loads or becomes visible at the time selenium will not able to find the element within the java processing time so selenium throws “NoSuchElementException᾿.

    We cannot alter the speed of the application, so we must slow down selenium.

    Type of Waits in selenium webdriver

    There are several ways to synchronize the selenium with application

    • Sleep
    • pageLoadTimeout
    • setScriptTimeout
    • ImplicitlyWait
    • ExplicitWait or WebdriverWait
    • FluentWait

    II. Sleep() in webdriver

    If you mention Thread.sleep(20); then selenium waits for 20 milli-seconds sleep method take the argument in milliseconds as the input. If you want to make the selenium to sleep for the 20 seconds means we need to mention like this Thread.sleep(20000);
    Sleep() method will not worry about whether the element is present or not; it just sleeps till the mentioned time. This is also called a static wait or blind wait, dead wait.

    Syntax : Thread.sleep(Long milli-seconds);


    Complete program for Sleep()

    public class A
    {
    	public static void main(String[] args) throws InterruptedException
    	{
    		//open firefox
    		WebDriver driver=new FirefoxDriver();
    		//open google.com
    		driver.get("https://oogle.com");
    		//wait for 5 seconds
    		Thread.sleep(5000);
    		//send text to the search bar
    		driver.findElement(By.name("search bar")).sendKeys("selenium-webdriver");
    		//click on the search button
    		driver.findElement(By.id("q")).click();
    	}
    }


    Code Example 2 for Sleep()

    public class GmailLogin
    {
    	public static void main(String[] args) throws InterruptedException							{
    		//open the firefox
    		WebDriver driver=new FirefoxDriver();
    
    		//sleep for 5 seconds
    		Thread.sleep(5000);
    
    		//open gmail.com
    		driver.get("https://www.gmail.com");
    
    		//sleep for 5 seconds
    		Thread.sleep(5000);
    
    		//enter the user name in the Email field
    		driver.findElement(By.id("Email")).sendKeys("username");
    
    		//sleep for 5 seconds
    		Thread.sleep(5000);
    
    		//enter the password in the password field
    		driver.findElement(By.id("Passwd")).sendKeys("password");
    
    		//sleep for 5 seconds
    		Thread.sleep(5000);
    
    		//sends the enter to the password field
    		//sendKeys always append the text present in the element
    		//it never erases the text in the element
    		driver.findElement(By.id("Passwd")).click();
    	}
    }

    Consider the above program in which we are using sleep() method every time it waits for 10 seconds.
    Let us consider a practical application in that we are having more than 8 pages and 50 operations. If we use Thread.sleep(10000) for 50 times, then it is 500 seconds around 10 minutes, so the dead time is more but no one prefers to wait.