Alerts in Selenium

Alerts in webpage used to get the attention of the user to perform some operation on the alert or the webpage, sometimes alert expects input from the user. All the alerts are formed using javascript inside HTML page, there are three kinds of alerts in HTML.

Alert takes the focus away from the current window and forces the browser to read the message. Alert prevents the user from accessing other parts of the web page until the box is closed.

Alert Types :
  • Alert
  • Confirmation dialog
  • Prompt


Properties of Alerts with respect to Selenium :

  • We cannot identify alerts using inspect tools
  • We cannot write xpaths for alerts
  • It is not a Window
  • We cannot handle alerts using javaScript Executor
We can consider as not alert if any of the above property mismatches.

Code of Alert handling in selenium


When an alert is present on the webpage we cannot proceed further without handling the popup, and if we try to perform any operation throws UnhandledAlertException.

We can handle alerts using switchTo().alert() method present in selenium, with the help of this alert() we can handle the popup.

Syntax to handle popup


                        		Alert ale = driver.switchTo().alert();
                  

Technical Tip : Selenium up-cast the object to Alert Interface in the above line of code With this api, we can perform below operations on the pop up.
1. Accept the popUp by clicking OK button


                        		ale.accept();
                  


2. Dismiss the popUp by clicking 'X' icon.


                        		ale.dismiss();
                  


3. Get popUp text by getText method


                        		ale.getText();
                  


4. Send text to popUp by sendKeys (Applicable for Prompt only)


                        		ale.sendKeys("test Text");
                  

webdriver never clicks Cancel button on any kind of alert



When do alerts occur on a page : It can occur on a page on any time but most of it happens on below timing of the webpage

  • On Webpage Load
  • On Webpage close
  • On click of an element
  • On Right click (when right-click disabled)
  • On wrong entry of a field
  • On information save
Technical Tip : Now day developer are using overlays/hidden division popups rather than javascript popups

Learn about Constructors in selenium and Java

Subscribe to my youtube channel :


Alert

The alert() method displays an alert box with a message and an OK button, an alert box is often used to inform a user about a particular operation like details saved in Database, right click disabled, Loaded successfully such kind of messages.

Alert is formed using alert("message") in javascript, alert considers the same irrespective of user operation whether he clicks OK or 'X' icon.

Alert's sole purpose is to inform user, nothing more.

Alert on Different browsers
Chrome: alert-on-chrome-selenium-webdriver

Firefox alert-on-firefox-selenium-webdriver

  • Open Url : https://chercher.tech/practice/practice-pop-ups-selenium-webdriver
  • Click on Alert button, the application throws an Alert box
  • Switch to the alert using driver.switchTo().alert(), we save this object in Alert type variable 'ale'
  • We can accept the alert by using accept() non-static method from the alert api, this closes the popup.
  • 
    driver.get("https://chercher.tech/practice/practice-pop-ups-selenium-webdriver");
    driver.findElement(By.name("alert")).click();
    Alert ale = driver.switchTo().alert();
    // clicks 'OK' button
    ale.accept();
    										


  • We can dismiss the popup using dismiss() method from alert api, this click 'X' icon on the popup. (if you have performed above step then you cannot perform this step as pop up is closed in step 4 itself)
  • 
    Alert ale = driver.switchTo().alert();
    // clicks 'x' icon
    ale.dismiss();
    								


  • We can get the text from the pop up using getText(), if you have performed step 4 or 5, this step will not work
  • 
    Alert ale = driver.switchTo().alert();
    // clicks 'x' icon
    ale.getText();
    								

    get-text-alert-selenium-webdriver

    Handle dropdowns in selenium

Confirmation Box

A Confirmation box is the second kind of alert, it displays a dialog with OK and Cancel button. Confirmation box informs developer about user choice whether the user pressed OK or Cancel. The confirm() method returns true if the user clicked "OK", and false otherwise('X' icon and 'Cancel') to the developer.

Confirmation box confirm-chrome-selenium-webdriver

We can handle Confirmation box in selenium like an alert box, there is no coding difference.

Learn about NoAlertPresentException in Webdriver

Prompt

Prompt is used to get value from the user in text format. Prompt provides textbar for user input, Prompt is rarely used alert type.

Prompt : prompt-selenium-webdriver

Prompt also follows the same coding as alert and prompt except sendkeys method, we can send a text to prompt textbar using sendkeys() method in alerts api.

You cannot use Keys.ENTER or such kind of keys with sendkeys() method of alerts


driver.get("https://chercher.tech/practice/practice-pop-ups-selenium-webdriver");
driver.findElement(By.name("prompt")).click();
Alert ale = driver.switchTo().alert();
ale.sendKeys("chercher.tech");
										

Handling nested frames in Selenium

How to check whether the alert is present or Not ?

We can use Explicit wait / WebdriverWait to check whether the alert is there or not, alertIsPresent() method wait for the alert to be present till the given timeout, once it reaches timeout and if the alert is not present then it throws TimeOutException if the alert is present before the timeout it proceeds with remaining code.

I have used only 2 seconds of time to check for the alert.


public static boolean isAlertPresent(){
    boolean presenceOfAlert = false;
    WebDriverWait wait = new WebDriverWait(driver, 2 /*timeout in seconds*/);
    try {
        wait.until(ExpectedConditions.alertIsPresent());
        presenceOfAlert = true;
    } catch (TimeoutException e) {
        presenceOfAlert = false;
    }
    return foundAlert;
}
										


Explanation :

  • We are setting presenceOfAlert to false, this is for by default value.
  • We are creating an object for WebdriverWait
  • We are using try{} block to see whether code throws an exception or not
  • We are checking whether the alert is there or not using alertIsPresent() method. If an alert is present execution goes to next line where we have set presenceOfAlert to true, but in case, if the alert is not there it will not execute "presenceOfAlert = true;" statement but goes to catch block.
  • We have used catch{} block to receive the exception, this catch block receives only TimeoutException
  • If try block code throws TimeoutException then presenceOfAlert = false; will be executed
  • Method returns the value based on the try catch block / based on the presence of alert.

Screenshot of an Alert

Taking a screenshot without handling alert is not possible, but you can take a screenshot using the robot class or any other external class present in java.

What you cannot do is, you cannot use the driver instance for any operation without handling the alert

Actually below code copies the screenshot to the clipboard.


// Press the key combination of (Windows + PrintScreen) by using Robot Class
Robot rb = new Robot();
rb.keyPress(KeyEvent.VK_WINDOWS);
rb.keyPress(KeyEvent.VK_PRINTSCREEN);
rb.keyRelease(KeyEvent.VK_PRINTSCREEN);
rb.keyRelease(KeyEvent.VK_WINDOWS);			

So using screenshot method in selenium we cannot capture the screenshot of javascript alert

Take Page & Element Screenshot, Compare Screenshots in selenium

Comment / Suggestion Section
Point our Mistakes and Post Your Suggestions
  • Great Tutorial
    Reply
  • Snehal
    Very useful blog...Thank you very much.
    Reply
    • Author
      Great, Snehal
      Reply
  • poorna pragna
    Excellent one! most of the points are covered. This very useful at the time interview.
    
    Thanks,
    Poorna Pragna
    
    Reply
  • kauser
    very good blog...pretty detailed..please launch a telegram or whatsapp group too...fr technical discussions..
    Reply
    • karthiq [admin]
      Thanks for you Feedback,
      
      We will create a group [ I donot even know, what is telegram :p ],
      
      but we will do 
      Reply