Waits in Selenium
What is wait? Why we need it?
It 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)
It 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)
Click on Compose button in Gmail
public class
Gmail
{
public static void
main(String[] args)
{
//open
firefox browser
WebDriver driver=new
FirefoxDriver();
//goto
gmail.com
driver.get("https://www.gmail.com");
//enter
text in username
driver.findElement(By.xpath("//*[@id='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 milli-seconds but normally 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 milli-seconds 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.
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
Sleep() in WebDriver
Sleep() is a method present in thread class,
most of the java people might be familiar with this. It makes selenium to sleep
for the specified time, we can specify the time
If you mention Thread.sleep(20); then
selenium waits for 20 milli-seconds sleep method takes argument in
milli-seconds as the input. If you want 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 mentioned time. This is also
called as static wait or blind wait, dead wait.
Syntax :
Thread.sleep(Long milli-seconds);
Complete
program 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 5 seconds.
Let us consider practical
application in that we are having more the 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 prefer to wait .
No comments:
Post a Comment