Selenium 4

Angie Jones

https://angiejones.tech

https://TestAutomationU.com

@techgirl1908

Principal Developer Advocate

Director, Test Automation University

Applitools, San Francisco, CA, USA

🚘 Test Driving 🚘

@techgirl1908

@techgirl1908

Relative Locators

@techgirl1908

@techgirl1908

<ul id="productList">

	<!-- Test Automation in the Real World -->
	<li id="pid1" class="ui-li-has-thumb ui-first-child">...</li>

	<!-- Experiences of Test Automation -->
	<li id="pid2" class="ui-li-has-thumb">...</li>

	<!-- Agile Testing -->
	<li id="pid3" class="ui-li-has-thumb">...</li>

	<!-- How Google Tests Software -->
	<li id="pid4" class="ui-li-has-thumb">...</li>

	<!-- Java for Testers -->
	<li id="pid5" class="ui-li-has-thumb">...</li>

	<!-- Advanced Selenium in Java -->
	<li id="pid6" class="ui-li-has-thumb">...</li>

	<!-- The Cucumber for Java Book -->
	<li id="pid7" class="ui-li-has-thumb">...</li>

	<!-- BDD in Action -->
	<li id="pid8" class="ui-li-has-thumb ui-last-child">...</li>
</ul>

@techgirl1908

@techgirl1908

var element = driver.findElement(


);

@techgirl1908

@techgirl1908

var element = driver.findElement(
	withTagName("li").

);

@techgirl1908

@techgirl1908

var element = driver.findElement(
	withTagName("li").
	toLeftOf(By.id("pid3"))
);

@techgirl1908

@techgirl1908

var element = driver.findElement(
	withTagName("li").
	toLeftOf(By.id("pid3"))
);

assertEquals("pid2", element.getAttribute("id"));
ComparisonFailure: 

Expected :pid2
Actual   :pid1

@techgirl1908

@techgirl1908

pid1

pid3

@techgirl1908

var elements = driver.findElements(
        withTagName("li").
        toLeftOf(By.id("pid3"))
);

System.out.println(
        elements.
        stream().
        map(e->e.getAttribute("id")).
        collect(Collectors.toList())
);
 [pid1, pid2, pid5, pid6]

@techgirl1908

@techgirl1908

pid1

pid3

pid2

pid5

pid6

var element = driver.findElement(
        withTagName("li").
        toLeftOf(By.id("pid3")).
        toRightOf(By.id("pid1"))
);

assertEquals("pid2", element.getAttribute("id"));

@techgirl1908

var element = driver.findElement(
        withTagName("li").
        toLeftOf(By.id("pid3")).
        toRightOf(By.id("pid1"))
);

assertEquals("pid2", element.getAttribute("id"));

@techgirl1908

@techgirl1908

@techgirl1908

var element = driver.findElement(
        withTagName("li").
        toLeftOf(By.id("pid3")).
        toRightOf(By.id("pid1"))
);

assertEquals("pid2", element.getAttribute("id"));

@techgirl1908

Things are not always as they appear...

@techgirl1908

@techgirl1908

<div class="view">
    <input class="toggle" type="checkbox">
    <label>goodbye world</label>
    <button class="destroy"></button>
</div>
driver.findElement(
    withTagName("input").
    toLeftOf(By.xpath("//label[text()='goodbye world']")))
    .click();
NoSuchElementException

@techgirl1908

@techgirl1908

@techgirl1908

Use it sparingly

@techgirl1908

Use for interaction,

not verification

@techgirl1908

Questions on

Relative Locators

@techgirl1908

New Window/Tab

@techgirl1908

driver.get("https://applitools.com/");

@techgirl1908

driver.get("https://applitools.com/");
driver.switchTo().newWindow(WindowType.TAB);

@techgirl1908

driver.get("https://applitools.com/");
driver.switchTo().newWindow(WindowType.TAB);
driver.get("https://testautomationu.applitools.com");

@techgirl1908

var windows = driver.getWindowHandles();
for(var window : windows){
    driver.switchTo().window(window);
    if("Automated Visual Testing with Visual AI".equals(driver.getTitle())){
        break;
    }
}

@techgirl1908

Questions on

New Windows/Tabs

@techgirl1908

Chrome DevTools Protocol

@techgirl1908

@techgirl1908

@techgirl1908

@techgirl1908

@techgirl1908

ChromeDriver driver = new ChromeDriver();
driver.executeCdpCommand();

@techgirl1908

@techgirl1908

ChromeDriver driver = new ChromeDriver();
driver.executeCdpCommand(
    "Emulation.setGeolocationOverride",
);

@techgirl1908

ChromeDriver driver = new ChromeDriver();

Map coordinates = Map.of(
        "latitude", 30.3079823,
        "longitude", -97.893803,
        "accuracy", 1
);

driver.executeCdpCommand(
    "Emulation.setGeolocationOverride",
    coordinates
);

driver.get("https://oldnavy.gap.com/stores");

@techgirl1908

ChromeDriver driver = new ChromeDriver();
DevTools devtools = driver.getDevTools();

@techgirl1908

devtools.send(
        emulateNetworkConditions(
                true,
                250,
                -1,
                -1,
                of(ConnectionType.CELLULAR2G)
        ));

@techgirl1908

How can I

test drive Selenium 4?

@techgirl1908

@techgirl1908

Selenium 4

Angie Jones

https://angiejones.tech

https://TestAutomationU.com

@techgirl1908

Principal Developer Advocate

Director, Test Automation University

Applitools, San Francisco, CA, USA

🚘 Test Driving 🚘

Test Driving Selenium 4

By Angie Jones

Test Driving Selenium 4

Let’s explore some of the most promising new features of Selenium 4 such as Relative Locators, Chrome Devtools Protocol (CDP), and more.

  • 581
Loading comments...

More from Angie Jones