¿Por qué debería hacer que los objetos de mi página sean instanciados en lugar de estáticos?

Soy un ingeniero de control de calidad relativamente nuevo que trabaja en el aprendizaje de Selenium (en Java) y quiero usar objetos de página para modelar mis páginas.

Actualmente, de la forma en que lo hago, mis clases de objetos de página son colecciones de variables estáticas (por objetos para localizar elementos de página) y métodos estáticos (para obtener los objetos por y realizar funciones de página). Esto me pareció la forma más simple, ya que mis métodos no necesitan depender de ninguna variable de instancia, solo de los localizadores.

Solo llamo a estos métodos ya que los necesito en mi código de prueba.

Sin embargo, todo lo que leo sobre los objetos de la página habla de crear instancias de ellos y de que los métodos devuelvan los objetos de la página. Esto parece que hace que todo sea más complicado. Por ejemplo, en lugar de tener un método para iniciar sesión, necesito dos, uno si el inicio de sesión es exitoso y otro si falla.

Sé que parece ser la mejor práctica aceptada, pero quiero entender por qué. Gracias.

Aquí está mi código de objeto de página, mis métodos de llamada de prueba comoLoginPage.login(username, password);

package pageObjects;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;


public class LogInPage {
    private static By emailTxtB = By.id("user_email");
    private static By passwordTxtB = By.id("user_password");
    private static By logInButton = 
                                 By.xpath("/html/body/div/div[2]/form/div[2]/div[2]/div/button"); 
    private static By signUpButton = By.xpath("/html/body/div/div[2]/form/div[2]/div[2]/div/a");
    private static By valErrorMessage = By.id("flash_alert");

    public static void logIn(WebDriver driver, String email, String password){      
        //Fill out form
        driver.findElement(emailTxtB).sendKeys(email);
        driver.findElement(passwordTxtB).sendKeys(password);

       //Submit form
       driver.findElement(logInButton).click();
    }


    public static void goToSignUp(WebDriver driver){
        driver.findElement(signUpButton).click();
    }

    public static String getValErrorMessage(WebDriver driver){
        return driver.findElement(valErrorMessage).getText();
    }

    public By getEmailTxtB(){
        return emailTxtB;
    }

    public By getPasswordTxtB(){
        return passwordTxtB;
    }

    public By getLogInButton(){
        return logInButton;
    }

    public By getSignUpButton(){
        return signUpButton;
    }
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta