More Selenium4 Goodies
Tags: selenium, webdriver, testautomation, selenium4
Published: 2019-10-14 14:00:04

---
title: More Selenium4 Goodies
published: true
description: Learn about new features introduced in Selenum4
tags: selenium, webdriver, testautomation, selenium4
---
After my previous post on [Selenium 4 Relative Locators](https://dev.to/upgundecha/selenium4-relative-locators-ml3), I further explored Selenium4 features and found a few more goodies in WebElement and WebDriver interfaces.

## Element Screenshots
Yes, now we can capture screenshot of an individual element or group of elements. This is a very useful feature.

The `WebElement` interface now supports `getScreenShotAs()` method by implementing the `TakesScreenshot` interface to capture a screenshot of the element.

This method accepts the `OutputType` argument and screenshots can be captured as FILE, BYTES or BASE64 string.

Let's try to capture screenshot of a link and the search box displayed on Google Search Home page:

![Alt Text](https://thepracticaldev.s3.amazonaws.com/i/tyuitbu18eni8gzplxpu.png)

```java
// find the Images link on Google Search home page
WebElement imagesLink = driver.findElement(By.linkText("Images"));

// take a screenshot of the link element
File linkScr = imagesLink.getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(linkScr, new File("./target/linkScr.png"));
```

We can also capture a group of elements by taking a screenshot of the parent element. Here is a complete example capturing the Images link and the search box:

```java
@Test
public void elementScreenShot() throws IOException {

    // find the Images link on Google Search home page
    WebElement imagesLink = driver.findElement(By.linkText("Images"));

    // take a screenshot of the link element
    File linkScr = imagesLink.getScreenshotAs(OutputType.FILE);
    FileUtils.copyFile(linkScr, new File("./target/linkScr.png"));

    // find the Search box which is a <form> element
    WebElement searchBox = driver.findElement(By.id("tsf"));

    // take a screenshot of the Search box
    File searchBoxScr = driver.findElement(By.id("tsf"))
            .getScreenshotAs(OutputType.FILE);

    FileUtils.copyFile(searchBoxScr, new File("./target/searchBox.png"));

}
```

##The new `getRect()` method
The new `getRect()` method is introduced in `WebDriver` interface which is essentially a combination of previous `getSize()` and `getLocation()` methods. Here's a difference between previous methods and new the `getRect()` method which returns a `Rectangle` object:
```java
@Test
public void elementRectTest() {

    // find the Images link on Google Search home page
    WebElement imagesLink = driver.findElement(By.linkText("Images"));

    // previous getSize() and getLocation() methods
    Dimension elementSize = imagesLink.getSize();

    System.out.println("Element height is " + elementSize.getHeight());
    System.out.println("Element width is " + elementSize.getWidth());

    Point elementLocation = imagesLink.getLocation();

    System.out.println("Element X Pos " + elementLocation.getX());
    System.out.println("Element Y Pos " + elementLocation.getY());


    // new getRect() method
    Rectangle elementRect = imagesLink.getRect();

    System.out.println("Element height is " + elementRect.getHeight());
    System.out.println("Element width is " + elementRect.getWidth());
    System.out.println("Element X Pos " + elementRect.getX());
    System.out.println("Element Y Pos " +  elementRect.getY());

}
```
## New additions in WebDriver

In addition, to `maximize()` method, the browser window can now be made fullscreen by using the new `fullscreen()` method:
```java
driver.manage().window().fullscreen();
```
A new `parentFrame()` method is added for navigating between frames.
```java
driver.switchTo().parentFrame()
```
I'm not really sure if this is completely new feature (or maybe I'm too lazy to go through the changes) but we can now create a new empty tab or new browser window by using the `newWindow()` method.
```java
driver.switchTo().newWindow(WindowType.TAB);
driver.switchTo().newWindow(WindowType.WINDOW);
```
That's it for now. I'll deep dive into new Selenium Grid features in an upcoming post.

### Closing note
These features are in alpha release and subject to change in future. Please use with caution. You can find the complete code example from this post in my GitHub repo [https://github.com/upgundecha/selenium4](https://github.com/upgundecha/selenium4)