In our previous post, we have seen the features / enhancements to selenium 4, among them one of the feature is handling windows like switching to a new browser tab / window out of box with selenium 4 & minimizing the window.
we will discuss this feature in detail
Minimizing browser window
If we look into selenium 4 api doc, there is a minimize() available under interface WebDriver.Window
we can minimize the browser window using below code line and continue performing the browser actions and also can take screenshots
driver.manage().window().minimize();
Here is one sample code implementation
package sel4;
import io.github.bonigarcia.wdm.WebDriverManager;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.io.File;
import java.io.IOException;
import java.time.Duration;
public class ScreenshotSamples {
private static WebDriver driver;
private static WebDriverWait wait;
@BeforeMethod
void Login() throws InterruptedException {
//WebDriverManager.chromedriver().setup();
//driver = new ChromeDriver();
WebDriverManager.firefoxdriver().setup();
driver = new FirefoxDriver();
driver.get("https://www.saucedemo.com/");
Thread.sleep(2000);
wait = new WebDriverWait(driver, Duration.ofSeconds(5));
}
@Test
public void ElScreenshot() throws InterruptedException {
driver.manage().window().minimize();
driver.findElement(By.id("user-name")).sendKeys("qavbox");
driver.findElement(By.id("password")).sendKeys("qavbox1");
driver.findElement(By.id("login-button")).click();
try {
wait.until(ExpectedConditions.presenceOfElementLocated(By.className("product_label")));
} catch (Exception e) {
System.out.println("Login Error" + e.getMessage());
WebElement el = driver.findElement(By.cssSelector("[data-test='error']"));
captureScreenShotOf(el, driver);
}
Thread.sleep(2000);
driver.quit();
}
void captureScreenShotOf(WebElement el, WebDriver driver){
File newImg = el.getScreenshotAs(OutputType.FILE);
try{
FileUtils.copyFile(newImg, new File("./screenshot/ElPageShot.jpg"));
}catch(Exception e){
e.printStackTrace();
}
}
}As you can see, we are minimising the browser window and performing login and then took screenshot.
Creating & switching to new Window / Tab
Before to selenium 4, we used to use robot class or some other library to create a new tab or window and then switch to that new window to perform browser actions
But with Selenium 4, with one line of code, we can create a new tab or window and switch to that window and perform any operation like loading a url
driver.switchTo().newWindow(WindowType.WINDOW).get("https://www.google.com/");
//or
driver.switchTo().newWindow(WindowType.TAB).get("https://www.google.com/");Let’s see one implementation
After we create a new window or tab, we can perform some browser actions and then use the getWindowHandles() to get the window strings and navigate to any of the window [we know all how to do :)]
package sel4;
import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WindowType;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.time.Duration;
public class WindowTypeSamples {
private static WebDriver driver;
private static WebDriverWait wait;
@BeforeMethod
void Login() throws InterruptedException {
//WebDriverManager.chromedriver().setup();
//driver = new ChromeDriver();
WebDriverManager.firefoxdriver().setup();
driver = new FirefoxDriver();
driver.get("https://www.saucedemo.com/");
Thread.sleep(2000);
wait = new WebDriverWait(driver, Duration.ofSeconds(5));
}
@Test
public void Test_newWindowType() throws InterruptedException {
System.out.println("Before navigating to new window" + driver.getCurrentUrl());
String parentWindow = driver.getWindowHandle();
Thread.sleep(2000);
//driver.switchTo().newWindow(WindowType.WINDOW).get("https://www.google.com/");
driver.switchTo().newWindow(WindowType.TAB).get("https://www.google.com/");
System.out.println("After navigating to new window" + driver.getCurrentUrl());
Thread.sleep(2000);
//perform google operations
driver.close();
driver.switchTo().window(parentWindow);
System.out.println("Parent windows" + driver.getCurrentUrl());
Thread.sleep(2000);
driver.close();
}
}
WindowType is a enum having 2 constants TAB & WINDOW
TAB will create a new tab on the same browser window currently driver is holding
WINDOW will create a new window out of current browser window.





1 Comment