Sunday, January 20, 2019

How To Handle Hidden Elements in Selenium WebDriver | Working with hidden controls in Selenium

In this tutorial, we will learn how to handle Hidden Elements on the web-pages using Selenium WebDriver.




Handle Hidden Elements





Hidden elements are the elements which are not displayed on the Web-Pages, however, it is available in the HTML DOM structure.

Elements are hidden on the web-pages due to below-mentioned reasons - 
  • They have a CSS display value of none.
          style=”display: none;”
  • They are form elements with type="hidden"
  • Their width and height are explicitly set to 0.
  • An ancestor element is hidden, so the element is not shown on the page.

Issue - Selenium does not allow to interact with an element which is hidden on the web-page and if we try to do so, then it will throw ''Element Not Visible Exception".

Solution - Selenium provides one feature called 'Javascript Executor' to handle such scenario.


Note - I will take 'https://learn.letskodeit.com/p/practice' website to explain the above concept.

If you open the above link and scroll down a bit, then on the right side you will get one section as displayed in the below image.





 - There are two buttons - 'Hide' and 'Show'
 - Currently, the 'Hide/Show Example' text box is displayed.
 - Once you click on the 'Hide' button, the text box will be hidden.
 - Again you click on the 'Show' button, the text box will be displayed.


Scenario 1 - Write a program to enter text in the text box which is hidden on the web-page.  

Case 1: I will hide the text box and then simply try to enter text 'text123' in the text box. "Element Not Visible Exception" will be thrown. See the below program -


 package com.sessions;  
   
 import org.openqa.selenium.By;  
 import org.openqa.selenium.JavascriptExecutor;  
 import org.openqa.selenium.WebDriver;  
 import org.openqa.selenium.chrome.ChromeDriver;  
   
 public class HiddenElementTest {  
   
      public static void main(String[] args) throws Exception {  
     System.setProperty("webdriver.chrome.driver", "F:\\software\\chromedriver_win32\\chromedriver.exe");  
             
           WebDriver driver = new ChromeDriver();  
             
           driver.get("https://learn.letskodeit.com/p/practice");  
             
           driver.manage().window().maximize();  
             
           //Clicking on the Hide button  
           driver.findElement(By.xpath("//input[@id='hide-textbox']")).click();  
                       
           driver.findElement(By.xpath("//input[@id='displayed-text']")).sendKeys("text123");;  
             
   
   
      }  
   
 }  
   


Output -





Case 2: This time I will handle Scenario 1 using Javascript Executor. See the below program -


 package com.sessions;  
   
 import org.openqa.selenium.By;  
 import org.openqa.selenium.JavascriptExecutor;  
 import org.openqa.selenium.WebDriver;  
 import org.openqa.selenium.chrome.ChromeDriver;  
   
 public class HiddenElementTest {  
   
      public static void main(String[] args) throws Exception {  
     System.setProperty("webdriver.chrome.driver", "F:\\software\\chromedriver_win32\\chromedriver.exe");  
             
           WebDriver driver = new ChromeDriver();  
             
           driver.get("https://learn.letskodeit.com/p/practice");  
             
           driver.manage().window().maximize();  
             
           //Clicking on the Hide button  
           driver.findElement(By.xpath("//input[@id='hide-textbox']")).click();  
                       
           JavascriptExecutor js = (JavascriptExecutor)driver;  
             
           // Identifying the element using ID attribute and Entering the value in the text box  
     js.executeScript("document.getElementById('displayed-text').value='text123'");  
             
             
           }  
   
 }  
   


Explanation -

  • JavascriptExecutor - It is an interface provided by Selenium WebDriver to execute Javascript commands in the Selenium Script.
  • getElementById() - It is a Javascript method that is used to locate an element on the web-page using ID attribute of that element.
  • executeScript() - It is a method of JavascriptExecutor interface to execute the javascript commands in the Selenium Script.

Note - Since the text box is hidden, so you won't be able to see the text entered in the text box. Run the program and you will find that it runs successfully without any exception. Now,  If you click on the 'Show' button then you will see the text is entered in the box.


That's all guys!!! Do comment and post your doubts related to Selenium!!!





Sunday, December 30, 2018

How To Select Date From Calendar in Selenium WebDriver using Jquery | Handle Date Time Picker Using Selenium WebDriver

In this tutorial, I am going to explain how to select a date from a calendar of any websites.




Handle Date Time Picker In Selenium



how-to-handle-calender-using-selenium-webdriver



We often observe Date Time Picker fields on the websites mostly on E-Commerce and Travel Booking websites. Different websites use the Date Time Picker field/Calendar having different UI, but the functionality is the same. So in this tutorial, we will learn how to handle Date Time Picker field/Calendar using Selenium WebDriver.

There may be different ways to handle such a scenario. But here I will explain just one way that will cover any type of Date Time Picker field of any websites. I will use just one line of code that will handle the scenario. I will use the concept of JavaScript Executor(JQuery).

We will take 'Yatra' website to demonstrate the scenario.


 package com.sessions;  
   
 import org.openqa.selenium.JavascriptExecutor;  
 import org.openqa.selenium.WebDriver;  
 import org.openqa.selenium.chrome.ChromeDriver;  
   
   
 public class CalendarTest {  
   
      public static void main(String[] args) {  
             
           System.setProperty("webdriver.chrome.driver", "F:\\software\\chromedriver_win32\\chromedriver.exe");  
             
           WebDriver driver = new ChromeDriver();  
             
           driver.get("http://www.yatra.com/");  
             
           driver.manage().window().maximize();  
             
           //Typecating driver as a JavascriptExecutor and assigning it to the variable of JavascriptExecutor  
           JavascriptExecutor js = (JavascriptExecutor )driver;  
             
           //Putting date to the the selected date picker.  
           js.executeScript("document.getElementById('BE_flight_origin_date').value='03/10'");  
   
      }  
   
 }  
   


Explanation

  • Javascript Executor is an Interface provided by Selenium WebDriver which is used to run Javascript commands from Selenium script.
  • This Interface provides a method executeScript() - to run the Javascript commands.
  • We need to import one package called org.openqa.selenium.JavascriptExecutor.
  • Since the driver can execute only selenium commands so we need to typecast driver as a JavascriptExecutor so that Javascript commands can be run from Selenium script.  
  • document.getElementById('BE_flight_origin_date').value='03/10'
Here, getElementById('value of the Id attribute') is used to locate element (date picker field) on the webpage using ID attribute and then we are setting date value to the field. We can inspect and get the Id attribute as we do in Selenium.

In case you do not know how to inspect element, follow the link - Inspect Element In Selenium



Note - Before setting the date value, first verify in which format the field is accepting the date value. Based on the format provide the value in the script. In our case format is - '03/10'.


As I said just one line of code and everything is done!!!


General Steps
  1. Define JavascriptExecutor interface variable and typecast the driver.
  2. execute the command by locating the date picker field using its Id attribute and set the value based on the acceptable date format.


That's all guys!!! Do comment and post your doubts related to Selenium!!!



Saturday, December 22, 2018

Top 10 Selenium Interview Questions And Answers - Part 1


Hello guys, In this blog I am going to provide most frequently asked selenium-related interview questions and answers in part-wise.




Part 1


1. How to handle dynamic elements in Selenium?

Solution – We can use x-path along with contains(), starts-with(), ends-with() methods –   
                    depends on the scenario.     

Example

Let’s say, ‘Id’ of a username field is – username_123
If you open the page again, then Id is showing as - username_245

That’s mean, the first part – username is static, whereas, second part after underscore is dynamic.

x-path for such scenario will be =  //*[contains(@id ,’username’)]

Since the starting text is static, the above scenario can also be handled using starts-with() method.

x-path = //*[starts-with(@id ,’username_’)]


Let’s say, ‘Id’ of a username field is – 123_username
If you open the page again, then Id is showing as – 245_username

Here the latter part is static.

X-path = //*[ends-with(@id ,’_username’)]


2.  Give an example of Method overloading in Selenium.

Solution -  Example can be switching to Frames.

·         frame(int index)
·         frame(string frame_name)
·          frame(WebElement element)


1   3.  How do you achieve synchronization in Selenium?
S
S   Solution – driver.manage().timeOuts().implicitlyWait(10, OutputType.SECONDS);
It 
il      It will ask the web driver to wait for 10 seconds before throwing an exception in case any web driver is unable to locate any element. It is applicable to every command written in the script.


1
   4. How to invoke an application in web driver?

S   Solution –

·         driver.get(“application_url”);

·         driver.navigate().To(“application_url”);


1  5. How to get the width and height of the textbox?
     Solution –

·         driver.findElement(By.xpath(“locator”)).getSize().getWidth();
·         driver.findElement(By.xpath(“locator”)).getSize().getHeigtht();



  
    6. Difference between Assert, Verify and WaitFor commands.
S
o   Solution –

·         Assert – It checks whether an element is on the page or not. If the element is not present, then the test will fail, and execution will stop at that point only.
·         Verify - It checks whether an element is on the page or not. If the element is not present, then the test will fail, but execution will continue until the last command of the script.
·         WaitFor – It waits for the specified amount of time so that the element may be available on the page. But if the element is not available within the specified amount of time, then the test will fail at that point only.


7.  Different ways to refresh the browser.

S     Solution –

·         Driver.navigate().refresh();
·         Driver.navigate().to(driver.getCurrentUrl());
·         Driver.get(driver.getCurrentUrl());



1  8. Different exceptions encountered in Selenium WebDriver.
S
S    Solution -  Below are some most encountered Exceptions that occur while creating Selenium Automation Script.

  •     NoSuchFrameException
  •     AlertNotPresentException. 
  •     NoSuchElementException.
  •     ElementNotVisibleException.
  •      NOSuchWindowException.
  •       TimeOutException.
         
         To get a detailed explanation, follow the linkExceptions In Selenium


    9. What is the alternate way to click on the Login button?

S   Solution –

                    submit() – But can be used only when attribute ‘type=submit’.

1
    10. What is the purpose of getOptions() methods?
S    
o      Solution – It is used to get all the selected options from the dropdown list.

                             Return Type -  List<WebElement>

       
      Below program will print all the options of the Country drop-down


 package com.javascript;  
   
 import java.util.List;  
   
 import org.openqa.selenium.By;  
 import org.openqa.selenium.WebDriver;  
 import org.openqa.selenium.WebElement;  
 import org.openqa.selenium.chrome.ChromeDriver;  
 import org.openqa.selenium.support.ui.Select;  
   
 public class GetOption {  
   
      public static void main(String[] args) {  
             
           System.setProperty("webdriver.chrome.driver", "F:\\software\\chromedriver_win32\\chromedriver.exe");   
            WebDriver driver = new ChromeDriver();   
            driver.get("http://newtours.demoaut.com/mercuryregister.php");   
            driver.manage().window().maximize();  
              
            Select select = new Select(driver.findElement(By.xpath("//select[@name='country']")));  
            List<WebElement> options = select.getOptions();  
            for(WebElement option : options)  
            {  
                 System.out.println(option.getText());  
            }  
              
   
      }  
   
 }