We are going to have a look at how we can turn our existing page objects into fluent page objects to enhance the readability and discoverability of our code. To do that, we are going to design DSL for our page objects that uses chains of commands to describe the action(s) that are being performed. Each chained command will return either a reference to itself, a reference to a new method, or a void.
The LoginPage object that we created earlier in this chapter will provide a good base for a fluent page object. It currently looks like this:
package com.masteringselenium.query_page_objects;
import com.lazerycode.selenium.util.Query;
import com.masteringselenium.fluent_page_objects.BasePage;
import org.openqa.selenium.By;
public class LoginPage extends BasePage {
private Query usernameField = new Query(By.id("username"),
driver);
private Query...