How to Download and Install TestNG in Eclipse for Selenium WebDriver

The Hacks of The Day
Install testng in eclipse

Guys In this article I will let you know how to download and install TestNG in Eclipse for Selenium WebDriver. Following is a step by step guide to install TestNG in Eclipse IDE.

Installation Process

Step 1) 
  1. Go to https://www.google.com/
  2. Type "testng" in the search field.
  3. Click on the "Google Search" button.
  4. Open the first link from the search results.

Step 2) 
  1. TestNG documentation page will be loaded.
  2. To locate the TestNG plugin press ctr+f and type "eclipse".
  3. Now press Enter until you find the plugin link.
  4. After locating the link("Eclipse-plugin") click on it. 

Step 3) 
  1. The landing page will show the plugin versions.
  2. Copy the downloading link for the latest release.
  3. But try to copy the link that is compatible with your eclipse version.
  4. In my case, I am using this one https://dl.bintray.com/testng-team/testng-eclipse-release/7.2.0/

Step 4) 
  1. Launch Eclipse IDE.
  2. Click on the "Help" menu.
  3. Click on the "Install New Software..." option.

Step 5) 
  1. Eclipse install dialog box will show.
  2. Click on the "Add" button.

Step 6) 
  1. Add repository dialog box will show.
  2. Enter TestNG in Name field.
  3. Enter the copied URL in the Location field (Copied in step 3).
  4. Click on the "Add" button.

Step 7) 
  1. Select the "TestNG" checkbox.
  2. Click on the "Next" button.

Step 8) 
  1. Component review dialog will show.
  2. Click on the "Next" button.

Step 9) 
  1. Click on radion button "I accept the terms of the license agreement".
  2. Click on the "Finish" button.

It will take some time to install the plugin, the speed of installation depends on your internet speed. After some time it will prompt a security warning.

Step 10) 
  1. When you see a security warning just click on the "Install Anyway" button.

Step 11) 
  1. Wait for the installation to finish. after some time a popup will open, then click on "Restart Now." button

Step 12) 
  1. After the restart, verify either TestNG is installed or not. 
  2. For verification navigate to Window > Show View > Other.
  3. A directory box will show.
  4. Open the "Java" directory and see if TestNG is there.

Above mentioned is the complete process of TestNG installation in Eclipse. If you have any queries, please comment below. Like this post, don’t forget to share it.

    Mouse Hover, Drag and Drop in Selenium WebDriver

    The Hacks of The Day
    Mouse Hover, Drag and Drop in Selenium WebDriver

    In this article, you will learn how to use mouse hover, drag and drop features in selenium web driver. Mouse hover is basically an action when you hover the mouse over a particular area, it shows a list of sub-menu. In the following diagram you can see when we hover on "Contribute", a list is shown. In selenium to handle such type of menu, we use the "Actions" class. We can not click directly on any entry in the list, if we try to click on any language, an exception will raise "Unable To Locate Element". To overcome this problem selenium has provided an Actions class. So before going into coding details, first we see what is Actions class and what it does?


    What is Actions Class:

    A class in the Selenium library is used to handle the mouse events, keyboard events, drag and drop and click on multiple elements using the advanced user interactions API. In Actions class, we have the following most commonly used keyboard and mouse events.

    1) moveToElement(toElement)
    2) clickAndHold(Webelement)
    3) contextClick()
    4) doubleClick()
    5) dragAndDrop(source, target)
    6) dragAndDropBy(source, xOffset, yOffset)
    7) release()

    Let's try to explain some of them that are used frequently in real-time projects.

    1) Mouse Movement (moveToElement())

    It is used to hover on the designated area. Because without hover we can not click on the submenu items. Let's try to understand this concept by writing the code with Actions class. If you want to click on the sub-element, first we need to mouse hover on the parent-element like "Contribute" as shown in the above image. then we can click on sub-element. Given below example will show the real-time result.

    Scenario:

    1) Go to https://jqueryui.com/
    2) Move mouse on Contribute link with Action class
    3) Click on CLA

    import org.openqa.selenium.By;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.interactions.Actions;
    public class MoveToElement {
     public static void main(String[] args) throws InterruptedException {
      System.setProperty("webdriver.chrome.driver", "/home/khawer/Desktop/chromedriver");
      WebDriver driver = new ChromeDriver();
      driver.get("https://jqueryui.com/");
      driver.manage().window().maximize();
      Actions actions = new Actions(driver);
      WebElement contributeLink = driver.findElement(By.xpath("//a[contains(text(),'Contribute')]"));
      actions.moveToElement(contributeLink).perform();
      System.out.println("Mouse Hover on Contribute");
      Thread.sleep(1000);
      driver.findElement(By.xpath("//a[contains(text(),'CLA')]")).click();
      System.out.println("Clicking on CLA");
     }
    }
    
    In the above example, we have created an object of an Actions Class passing the WebDriver instance. With the object of the Actions class, the driver moves to the main menu and then to the sub-menu and click on it.

    2) Drag and Drop (clickAndHold(Webelement))

    In Drag and Drop, we hold the source element and place it on the target element. For this, we use clickAndHold(webelement) method. It holds the left click button down on the specified element. When the source element is moved on the target element then we release the left click by using the release() method. For practice purposes, you can run the following code snippet

    Scenario:

    1) Go to https://jqueryui.com/droppable/
    2) Hold the source element with clickAndHold() method
    3) Move the source element on the target element
    4) Release the source element

    import org.openqa.selenium.By;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.interactions.Actions;
    public class ClickAndHoldMethod {
     public static void main(String[] args) throws InterruptedException {
      System.setProperty("webdriver.chrome.driver", "/home/khawer/Desktop/chromedriver");
      WebDriver driver = new ChromeDriver();
      driver.get("https://jqueryui.com/droppable/");
      driver.manage().window().maximize();
      driver.switchTo().frame(0);
      Actions actions = new Actions(driver);
      actions.clickAndHold(driver.findElement(By.xpath("//div[@id= 'draggable']")))
             .moveToElement(driver.findElement(By.xpath("//div[@id= 'droppable']")))
             .release().build().perform();
     }
    }

    Alternative Method (dragAndDrop(scr element, target element))

    Alternatively, you can do drag and drop by using dragAndDrop(sourceElement, targetElement) method. In this method we need to pass the two parameters, one is source element and the other is the target element.

    import org.openqa.selenium.By;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.interactions.Actions;
    public class DragAndDropMethod {
     public static void main(String[] args) throws InterruptedException {
      System.setProperty("webdriver.chrome.driver", "/home/khawer/Desktop/chromedriver");
      WebDriver driver = new ChromeDriver();
      driver.get("https://jqueryui.com/droppable/");
      driver.manage().window().maximize();
      driver.switchTo().frame(0);
      Actions actions = new Actions(driver);
      WebElement sourceElement = driver.findElement(By.xpath("//div[@id= 'draggable']"));
      WebElement targetElement = driver.findElement(By.xpath("//div[@id= 'droppable']"));
      actions.dragAndDrop(sourceElement, targetElement).build().perform();
     }
    }
    

    3) Drag and Drop (dragAndDropBy(source, xOffset, yOffset))

    If you want to move a single element to a new location then dragAndDropBy(source, xOffset, yOffset) method is used. It takes two parameters one is source element and the other one is x,y coordinates. In the given example the source element will be moved to a new location (xOffset = 200,yOffset = 100).
    Selenium Command: actions.dragAndDropBy(elementToDrag, 200, 100).perform();
    

    Example Code:

    import org.openqa.selenium.By;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.interactions.Actions;
    public class DragAndDropBy {
     public static void main(String[] args) {
      System.setProperty("webdriver.chrome.driver", "/home/khawer/Desktop/chromedriver");
      WebDriver driver = new ChromeDriver();
      driver.get("https://jqueryui.com/draggable/");
      driver.manage().window().maximize();
      driver.switchTo().frame(0);
      WebElement elementToDrag = driver.findElement(By.id("draggable"));
      Actions actions = new Actions(driver);
      actions.dragAndDropBy(elementToDrag, 200, 100).perform();
     }
    }
    

    4) Double Click (doubleClick())

    Double click action in Selenium web driver can be achieved by using Actions class. Actions class is a builtin class in Selenium web driver used to perform multiple keyboard and mouse operations such as Right Click, Drag and Drop. Double click in Selenium using Actions class is done by the following selenium command.
    Actions actions = new Actions(driver);
    WebElement element = driver.findElement(By.id("ID"));
    actions.doubleClick(element).perform();
    
    
    Initially, we instantiate an object of Actions class and pass the driver object as a parameter. Then we locate the required element that we want to double click. After that, we use the pre-defined method doubleClick() to perform the double click action. Given below is the practical example of double click method.
    import org.openqa.selenium.By;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.interactions.Actions;
    public class DoubleClick {
     public static void main(String[] args) throws InterruptedException {
      System.setProperty("webdriver.chrome.driver", "/home/khawer/Desktop/chromedriver");
      WebDriver driver = new ChromeDriver();
      driver.get("https://jqueryui.com/");
      driver.manage().window().maximize();
      Actions actions = new Actions(driver);
      actions.moveToElement(driver.findElement(By.xpath("//h3[text()= 'Interactions']")));
      actions.doubleClick().perform();
     }
    }
    
    I hope this article, will help you more to understand the Mouse Events, Drag and Drop events.

    How to Handle Frames in Selenium WebDriver

    The Hacks of The Day

    Today I'm going to cover one very important topic in Selenium WebDriver how to handle different frames in Selenium WebDriver. Sometimes you see that you are unable to locate an element and sometimes you see that element not found exception so there is a very big reason behind that, that might be possible that element is available on that particular frame so what is a frame? First, we need to understand it.

    What is Frame?

    A frame is a part of the web page, which displays contents independently, means independent of its container. With the help of the following image, you can understand easily, what is a frame and how it works. Whenever you open any browser and type the URL in the address bar what happens, a web page is loaded against that particular URL. That page contains different web elements like you know these elements are text fields, radio buttons, checkboxes, and some links are available or some images are available, number of elements are directly available on the page.


    But some elements are available in the particular frame so one more hierarchy is their frame. So the first hierarchy I would say the opening of browser and then we have a page that is your web page, which you open in the browser like Facebook.com, Twittwe.com or whatever and the third hierarchy is called a frame. Now what exactly the frame, a frame is another web element, it will be treated as a web element but it will also contain a number of elements as shown in the diagram, in this frame also we have some buttons or links, buttons and text fields.

    So in simple words, some elements on web pages are available in the form of frames, when the user clicks or hovers on that element, a frame is shown that frame also has some web elements. The question is here, how do we interact with frame and how we have access to the frame elements. Frame elements mean those elements which are available on that particular frame.

    How to access the elements in a frame?

    To access the frame elements we have to switch from page to frame, then we can access frame elements. Otherwise, you will get an exception "NoSuchElementFound". The
    the general syntax to switch over elements in a frame is:
    driver.switchTo().frame();
    
    There are two important properties that are used to switch over the elements in the frame.

    1) By Index
    2) By Name

    By Index:

    The frame index always starts from 0. If you want to interact with the first frame, you can use the following Selenium command.
    driver.switchTo().frame(0);
    
    Similarly, you can get control of other frames by using the index number. For the second frame, you can write the following command, and so on.
    driver.switchTo().frame(1);
    

    By Name:

    Name is another property that you can use to access the frame elements.
    driver.switchTo().frame("myframe");

    Example Code

    Scenario:

     1) Go to this URL https://chercher.tech/practice/frames-example-selenium-webdriver
     2) Switch to frame
     3) Find the element in the frame
     4) Enter some text
     I have found one very good example of a frame. Let's see how it works practically.
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    public class FrameHandling {
     public static void main(String[] args) {
      System.setProperty("webdriver.chrome.driver", "/home/khawer/Desktop/chromedriver");
      WebDriver driver = new ChromeDriver();
      driver.get("https://chercher.tech/practice/frames-example-selenium-webdriver");
      driver.manage().window().maximize();
      driver.switchTo().frame("frame1");
      driver.findElement(By.xpath("//input[@type='text']")).sendKeys("Sample Input");
     }
    }

    Nested Frame

    Nested frames are used to navigate from frame to another frame. In our example let's try to tick the checkbox. A checkbox is an element of frame 3, which resides inside the frame 1. So to interact with the checkbox first we need to switch to frame 1. Then we can switch to frame 3. But directly we can't access frame 3. The given image is showing the nested frame process.


    Scenario: 

    1) Launch the URL https://chercher.tech/practice/frames-example-selenium-webdriver
     2) Switch to frame1
     3) Switch to frame3
     4) Tick the checkbox

    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.firefox.FirefoxDriver;
    public class NestedFrames {
     public static void main(String[] args) {
      System.setProperty("webdriver.chrome.driver", "/home/khawer/Desktop/chromedriver");
      WebDriver driver = new ChromeDriver();
      driver.get("https://chercher.tech/practice/frames-example-selenium-webdriver");
      driver.manage().window().maximize();
      driver.switchTo().frame("frame1");
      driver.switchTo().frame("frame3");
      WebElement checkbox = driver.findElement(By.xpath("//input[@type='checkbox']"));
      if (!checkbox.isSelected()) {
       checkbox.click();
      }
     }
    }
    

    Switch to Parent Frame

    To get out of the current frame the following command is used. It moves the control to the outer frame or page level. If you don't shift the control to the parent frame, you can't access the other elements.
    driver.switchTo().parentFrame()
    
    Now let try to move from frame 3 to frame1 then to the page level. As shown in the below diagram.


    Scenario:

     1) Tick the checkbox in frame 3, frame 3 is present in frame 1
     2) Move back to frame 1 then enter some text in the topic field
     3) Now get out of frame 1 to page level and compare the header title
    import org.openqa.selenium.By;
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.firefox.FirefoxDriver;
    public class ParentFrame {
     public static void main(String[] args) {
      System.setProperty("webdriver.chrome.driver", "/home/khawer/Desktop/chromedriver");
      WebDriver driver = new ChromeDriver();
      driver.get("https://chercher.tech/practice/frames-example-selenium-webdriver");
      driver.manage().window().maximize();
      driver.switchTo().frame("frame1");
      driver.switchTo().frame("frame3");
      WebElement checkbox = driver.findElement(By.xpath("//input[@type='checkbox']"));
      if (!checkbox.isSelected()) {
       checkbox.click();
      }
      driver.switchTo().parentFrame();
      driver.findElement(By.xpath("//input[@type='text']")).sendKeys("selenium");
      driver.switchTo().parentFrame();
      String textValue = driver.findElement(By.xpath("//label/span")).getText();
      if (textValue.equals("selenium webdriver")) {
       System.out.println("Topic value is equal to 'selenium webdriver'");
      } else {
       System.out.println("Text is not equal to header text");
      }
     }
    }
    

    Default Content

    The default Content command exits all the frames and moves the selenium control to the page level. You can directly move to page-level from any frame. The following syntax is used for default content:
    driver.switchTo().defaultContent();
    

    Summary:

    1) How to switch to frame in selenium
     2) How to interact with frame elements
     3) How to use nested frames
     4) How to move the control to page level
     5) How to use the parent frame

    How to Handle Alerts in Selenium WebDriver

    The Hacks of The Day

    In this tutorial, we will let you know about different types of alert appeared in web applications and how to handle these Alerts in Selenium WebDriver. We will also figure out how do we accept and reject the alert depending upon the alert types. Alert is a small pop up window that comes up on the screen. There are numerous user activities that can bring about an alert on-screen. For e.g. user clicked on a button that displayed a message, The HTML page asked you for some extra information. So in this article, we will learn how to Handle Alerts, JavaScript Alerts, and PopUp Boxes in Selenium WebDriver.

    What is Alert?

    An alert is a small dialog box that displays on-screen. It gives some kind of information to the user or asks for permission to perform a certain kind of operation. It can be also used for warning purposes. Alerts are different from regular windows. The major difference is that alerts are blocking in nature, they will not allow any action on the underlying webpage if they are present.

    How to handle Alert in Selenium WebDriver

    Selenium WebDriver provides the following methods to interact with the Alerts depending on the Alert types.

    1. void dismiss(): It is used to cancel the alert
    driver.switchTo().alert().dismiss();

    2. void accept(): It is used to click on ok button of the alert
    driver.switchTo().alert().accept();

    3. String getText(): It captures the alert message text
    driver.switchTo().alert().getText();

    4. void sendKeys(String stringToSend): It sends some data to alert
    driver.switchTo().alert().sendKeys("Text");

    1. Simple alert

    Simple alerts have just the ok button on them, they give some information to users. Following is the practice example of a simple alert in Selenium Webdriver.

    import org.openqa.selenium.Alert;
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    
    public class SimpleAlertBox {
     public static void main(String[] args) {
      System.setProperty("webdriver.chrome.driver", "/home/khawer/Desktop/chromedriver");
      WebDriver driver = new ChromeDriver();
      // Launch the URL
      driver.get("https://www.testandquiz.com/selenium/testing.html");
      driver.manage().window().maximize();
      driver.findElement(By.xpath("//button[text()='Generate Alert Box']")).click();
      // First Alert class will shift the focus to the alert box
      Alert alert = driver.switchTo().alert();
      // Accept() method will accept the alert box
      alert.accept();
      // Close the browser
      driver.close();
     }
    }
    

    2. Confirmation Alert

    Confirmation Alert comes with two options (Ok/Cancel), you can accept it or dismiss it. It requires user confirmation to perform some task. Users can accept it or cancel it. Here is a code to dismiss the confirmation alert.
    import org.openqa.selenium.Alert;
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    public class ConfirmationAlert {
     public static void main(String[] args) {
      System.setProperty("webdriver.chrome.driver", "/home/khawer/Desktop/chromedriver");
      WebDriver driver = new ChromeDriver();
      // Launch the URL
      driver.get("https://www.testandquiz.com/selenium/testing.html");
      driver.manage().window().maximize();
      driver.findElement(By.xpath("//button[text()='Generate Confirm Box']")).click();
      Alert confirmationAlert = driver.switchTo().alert();
      confirmationAlert.dismiss();
      // Close the browser
      driver.close();
     }
    }
    

    3. Prompt Alert

    In the prompt alert, you can enter some text by using sendkeys method. These alerts are used when some information is required from the user side. Here is the code example for the prompt alert.
    import org.openqa.selenium.Alert;
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    public class PromptAlert {
     public static void main(String[] args) {
      System.setProperty("webdriver.chrome.driver", "/home/khawer/Desktop/chromedriver");
      WebDriver driver = new ChromeDriver();
      // Launch the URL
      driver.get("https://www.khawarautomationlabs.com/2020/04/alerts-in-selenium-webdriver-in-this.html");
      driver.manage().window().maximize();
      driver.findElement(By.xpath("//button[text() = 'Click on me']")).click();
      Alert promptAlert = driver.switchTo().alert();
      String alertText = promptAlert.getText();
      System.out.println("Alert text is: " + alertText);
      promptAlert.sendKeys("Prompt Alert");
      promptAlert.accept();
     }
    }
    Prompt popup Sample

    Prompt Box Example

    Prompt Box Click the button to open the prompt box.

    How to Click on Image in Selenium Webdriver

    The Hacks of The Day

    In this tutorial, we will let you know how to click on an image in Selenium WebDriver. When a user clicks on an image it redirects the user to a different window or page. As shown in the below image, when the user clicks on the "Facebook" logo, it redirects to the homepage.


    We can't find image elements by By.linkText() and By.partialLinkText() methods because image links basically have no link texts at all. In this case, we can use CssSelector or XPath.

    In the below example, we will access the "Facebook" logo on the upper left portion of Facebook's Password Recovery page.

    Scenario:
    1. Go to this URL https://www.facebook.com/login/identify?ctx=recover
    2. Click on Facebook logo
    3. The home page will show
    1) Click on image By using XPath
    import org.openqa.selenium.By;
    import org.openqa.selenium.firefox.FirefoxDriver;
    public class ClickOnImageByXpath {
     public static void main(String[] args) {
      String baseUrl = "https://www.facebook.com/login/identify?ctx=recover";
      System.setProperty("webdriver.gecko.geckodriver",
      "/home/khawer/eclipse-workspace/TrainingVideos/geckodriver");
      FirefoxDriver driver = new FirefoxDriver();
      driver.get(baseUrl);
      driver.findElement(By.xpath("//a[@href  = 'https://web.facebook.com/']")).click();
      if (driver.getTitle().equals("Facebook – log in or sign up")) {
       System.out.println("We are at Facebook's homepage");
      } else {
       System.out.println("We are not at Facebook's homepage");
    }
    
    2) Click on image By using CssSelector
    import org.openqa.selenium.By;
    import org.openqa.selenium.firefox.FirefoxDriver;
    public class ClickOnImageByCssSelector {
     public static void main(String[] args) {
      String baseUrl = "https://www.facebook.com/login/identify?ctx=recover";
      System.setProperty("webdriver.gecko.geckodriver",
      "/home/khawer/eclipse-workspace/TrainingVideos/geckodriver");
      FirefoxDriver driver = new FirefoxDriver();
      driver.get(baseUrl);
      driver.findElement(By.cssSelector("a[title=\"Go to Facebook home\"]")).click();
      if (driver.getTitle().equals("Facebook – log in or sign up")) {
       System.out.println("We are at Facebook's homepage");
      } else {
       System.out.println("We are not at Facebook's homepage");
      }
     }
    }
    

    How to access forms in Selenium with Java

    The Hacks of The Day

    Have you noticed the ubiquity of web forms while surfing the internet? Almost every website or web-application you visit has an interface in the form of web-forms to collect the necessary information about yourself. A webform comprises web elements such as checkbox, radio button, password, drop down to collect user data.

    If you are going to perform automated browser testing for your website or web-application then you simply can’t afford to drop-out the forms from your test automation scripts. In the case of test automation, Selenium has an API (Application Programming Interface) that helps to find these web elements and take subsequent actions on them like selecting a value or entering some text.

    This article will help you to understand how you can access web forms in Selenium to automate the web application. I will be using the JUnit Framework with some annotations to execute our Selenium automation testing later in this article.

    To begin our learning with, we’ll first understand what a WebElement is, how can it be accessed in Selenium Automation, and then go about seeing the basic form elements like the input boxes, buttons, the actions that can be performed on these forms and finally writing a script to handle a form and run it on various browsers. If you are already aware of the basics then feel free to skip through the sections according to yourself:

    What Is A WebElement?

    In simple words, anything present on a webpage constitutes a WebElement. Examples can be a text box, a radio button, etc. Selenium Webdriver provides an interface that is called the WebElement which is responsible for all the possible actions that take place on the web page. To locate the web elements, the Selenium web driver provides the two methods which are given below

    1. findElement()
    2. findElements().

    findElement(): It locates the single web element. After finding the element is found it is returned as a WebElement object. Let us now see the syntax of findElement(), but before we start using the WebElement object in our test script we need to make note of one very important point.

    We need to import the following packages to start creating objects of the WebElements:

    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.WebElement;

    Syntax for findElement():
    WebElement ele = driver.findElement(By.id("id");

    WebElement ele = driver.findElement(By.xpath("xpath");
    findElements(): It returns a list of WebElements that corresponds to the locator defined in the method.

    The syntax for findElements() is as shown below:
    List<WebElement> ele = driver.findElements(By.xpath("xpath");

    Now that we are thorough with the understanding of the WebElement interface, along with the difference between findElement() & findElements() method in Selenium automation testing. It is time to deep dive into these web elements. We will now list down all the web fields that may be involved in your website or web application form. Now we will learn how to access web forms in Selenium WebDriver.

    How To Locate Web Elements

    Now we know that what different types of web elements we can come across in our application, We need to identify these web elements through our Selenium automation testing scripts and to do so first we need to find the locators. Locators are the parameters given to the findElement() or findElements() methods which help to retrieve the web element by using its properties like the ID, Name, Class, etc. In general, we have 8 locators in Selenium that are widely used:
    • ID
    • Name
    • Tag Name
    • Class Name
    • LinkText
    • Partial LinkText
    • XPath
    • CSS Selector
    Few of the examples are:

    WebElement eid = driver.findElement(By.id(“email”);

    WebElement pswd = driver.findElement(By.name(“password”);

    WebElement sbmtBtn = driver.findElement(By.xpath(“//input[@value=”submit”]”);

    Types of Fields

    To subsequently build the scripts to access forms in Selenium WebDriver, we need to understand the various fields that we will have to handle in our test automation scripts. Let's see how to access these Web elements using Selenium Web Driver with Java. Selenium represents the form element as an object of Web Element. It has an API to find the elements and take action on them like entering text into text boxes, clicking on the buttons, etc. Now we will explore the methods that Selenium makes available to access the form element. Let us try to dig a little more about these WebElements one by one.

    Input Box

    The input box is a primary element in any form. No form is complete without user input. It can be of two types:

    Text Field Box – Text boxes that display the value as is entered by the user.
    Password Field Box – Text boxes that display special characters (mostly ‘*’) when the value is entered by the user.
    The following image representing the input boxes inside a web form.


    Buttons

    Buttons are the most important fields to consider while you access forms for Selenium automation testing. There is no point in filling up a form if there is no interface to submit the same. Buttons are simply used to submit whatever information we have filled in our text boxes. This can be submitting some form of data or simply submitting the sign-in information to the server.

    CheckBox

    In most of the websites that are widely used we see a small box that enables us to check or uncheck it. Mostly in agreement sections wherein the user needs to confirm the understanding of these policies. The checkbox is used to return a boolean value, if it is checked then it would return True else would return false.


    Radio Button

    A radio button is shown in the form of a circle on any web page. Mostly it is used to show the "Gender" on sign up forms. That is what a radio button is. It is similar to a checkbox only difference being if we are given multiple radio buttons we can select just one, while in the case of multiple checkboxes, we can opt multiple of them.


    Link

    We all face the common problem of forgetting our account passwords. Noticed the Forgot Password link on the screens? That is what a link is. It redirects us to a new web page or a new window pop-up or a similar thing. It links us to a new URL altogether.

    Drop Down

    There are times for a website where there are multiple options for a specific category. Say a website to book your flight tickets. To pick up the Origin & Destination city we often see a list with multiple values. This list which has an arrow at the rightmost end to expand and show the values is called a drop-down. It provides a list of options to the user thereby giving access to one or multiple values as per the requirement.


    Below is a snapshot of the Facebook Sign up form.

    How To Interact With Web Elements

    Now, let's see how we access the forms elements in Selenium and how different actions can be performed on each one of them.

    Input Box

    To handle any input box, we must be able to enter information, clear information, or get information from the box. Selenium offers the following methods to work with text boxes are:

    • sendKeys()
    • clear()
    • getText()
    To enter text into a textbox we can use the sendKeys method which would input the user required text from our automation script.

    driver.findElement(By.id(“username”).sendKeys(“test@gmail.com”);

    The above statement would enter the Email ID as abc@gmail.com into a text box whose ID is username. Now, to clear a pre-entered text or the text that you last entered can be wiped clean with the clear() method.

    driver.findElement(By.id(“username”)).clear();

    The third method that can be used on a text box is the getText() method. It’ll fetch the text that is written in a text box in case we need to validate some existing or entered text.

    String nameText = driver.findElement(By.id(“username”)).getText();

    The above line of code would return the text, let us take the text entered by the first line of code above, i.e. test@gmail.com and store it in nameText variable of string type. There might be chances when the text is present in the value property. In such a scenario we will use the getAttribute() method in place of getText().

    String nameText = driver.findElement(By.id(“username”)).getAttribute(“value”);

     Buttons

    We can submit the information by using buttons. This can be done through click actions on the same. The following are the two methods that are available in selenium to perform actions on the buttons.
    • click()
    • submit()
    It might look like there is no difference in both the methods, but a very minute detail changes the usage of each method. Both of these methods would eventually submit the form data to the server, but we need to understand the type of the web element present. If the element type is either ‘submit’ or ‘button’, click() method would work for both, but if the element type is ‘submit’ with the button being inside

    driver.findElement(By.id(“submtLogIn”).click();

    driver.findElement(By.id(“submtLogIn”).submit();

    CheckBox

    To interact with checkbox, we’ll use the following Selenium methods:
    • click()
    • isSelected()
    To select or check a value we use the click() method. It simply changes the state from unchecked to checked and vice-versa.

    driver.findElement(By.id(“name”)).click();

    Now that we can check/uncheck a checkbox, we might first need to know the state of a checkbox before performing a certain action with Selenium automation testing. To get the state we use isSelected() method which would return a boolean value. This means if the checkbox is checked we’d get a True else we’ll get False.

    boolean state = driver.findElement(By.id(“name”)).isSelected();

    Radio Button

    The actions performed on the radio button are similar to those on a checkbox and we can use the same methods as above for the radio button as well.
    • click()
    • isSelected()

    Link

    Links are generally embedded in a web page for us to navigate to a new screen or a popup or a form. We can either do a click action on them or can get the text that it holds and then proceed with our execution.
    • click()
    • getText()
    Both of the above methods can be used in a way similar as stated above.

    Dropdown

    Dropdowns are very commonly and widely used for selecting among a range of options. There is a wide variety of methods that we can use with dropdowns. Let us see them and their corresponding syntax & usage one by one.

    selectByVisibleText(String)-  It selects the value from the dropdown by comparing it with visible text, that is passed as a parameter.

    selectByIndex(int)- Selects option based on the index in the drop-down menu with integer parameter passed as the index.

    selectByValue(String)- It selects the option in the dropdown, based on the value in string format.

    In a similar way we can deselect any selected value from the dropdown using any of the below options:

    deselectByVisibleText(String)
    deselectByIndex(int)
    deselectByValue(String)
    deSelectAll()

    To select an option from the dropdown in selenium, syntax can be as follows:

    Select se=new Select(driver.findElement(By.id("nation")));
    se.selectByValue("Ind");

    To select the single or multiple options some methods are given below:

    getAllSelectedOptions()- It is used to get the list of all selected option in the dropdown.
    getFirstSelectedOption()- This method would return the first option that has been selected from the dropdown and unlike the above method it would return a single web element and not a list.

    getOptions()- This method would enable us to get a list of all available options in a dropdown.

    isMultiple()- To check if a dropdown can take multiple options, we can use isMultiple() method which would return a boolean value.

    To get a list of options we can write our piece of code by referencing a list object:

    Select se=new Select(driver.findElement(By.id("nation")));
    List<WebElement> list=se.getOptions();

    Now let's try to perform the basic operations and handling of form elements.

    Working Example of Form Elements

    Here is a practical demonstration of the test script, how to access forms in Selenium.

    Facebook Sign up Script

    package com.qa.demo.testcases;
    
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.support.ui.Select;
    import org.testng.annotations.AfterClass;
    import org.testng.annotations.BeforeClass;
    import org.testng.annotations.Test;
    
    public class TestFaceBookForm {
    
     public static WebDriver driver;
    
     @BeforeClass
     public static void setUp() {
      //Launch FireFox Browser and Hit the URL
      System.setProperty("webdriver.gecko.driver","/home/khawer/Desktop/geckodriver");
      driver = new FirefoxDriver();
      driver.manage().window().maximize();
      driver.get("https://facebook.com");
     }
    
     @Test
     public void fillForm() {
    
      // Enter First Name
      WebElement fName = driver.findElement(By.xpath("//input[@name='firstname']"));
      fName.sendKeys("--Enter you name here--");
      
      // Enter Last Name
      WebElement lName = driver.findElement(By.xpath("//input[@name='lastname']"));
      lName.sendKeys("--Enter your last name--");
      
      // We are writing the following two lines just to check the clear function
      lName.clear();
      lName.sendKeys("XYZ");
      
      // Enter Email
      WebElement eMail = driver.findElement(By.xpath("//input[@name='reg_email__']"));
      eMail.sendKeys("--Enter mail or contact number--");
      
      // Enter Password
      WebElement pwd = driver.findElement(By.xpath("//input[@name='reg_passwd__']"));
      pwd.sendKeys("--Enter a valid password here--");
     
      // Select Method for drop downs
      Select date = new Select(driver.findElement(By.xpath("(id('day'))")));
      date.selectByVisibleText("25");
      
      Select month = new Select(driver.findElement(By.xpath("(id('month'))")));
      month.selectByVisibleText("Mar");
      Select year = new Select(driver.findElement(By.xpath("(id('year'))")));
      year.selectByVisibleText("1985");
     
      driver.findElement(By.className("_58mt")).click();
    
      WebElement sgnUp = driver.findElement(By.xpath("//button[@id='u_0_13']"));
      sgnUp.click();
     }
     @AfterClass
     public static void tearDown() {
      //driver.quit();
     }
    }