我正在尝试通过Selenium WebDriver自动化prestashop测试用例。我做对了吗,尤其是页面对象模型?

这是我的HomePagePOM类:

package pageObjects;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.Alert;

public class HomePagePOM {
    private static WebElement element = null;
    private static WebDriver driver = null;
    public static String correctLogin = "aaaa";

    public static void enterPage(WebDriver driver) {
        driver.get("http://website.com");
    }

    public static WebElement homeLogo(WebDriver driver) {
        element = driver.findElement(By.id("header_logo"));
        return element;
    }

    public static WebElement searchBar(WebDriver driver) {
        element = driver.findElement(By.id("search_query_top"));
        return element;
    }

    public static WebElement searchBarButton(WebDriver driver) {
        element = driver.findElement(By.name("submit_search"));
        return element;
    }

    public static WebElement contactUs(WebDriver driver) {
        element = driver.findElement(By.id("contact-link"));
        return element;
    }

    public static WebElement signIn(WebDriver driver) {
        element = driver.findElement(By.className("header_user_info"));
        return element;
    }

}


这是我的LoginPagePOM类:

package pageObjects;

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

public class LoginPagePOM {
    private static WebElement element = null;
    private static WebDriver driver = null;
    public static String correctLogin = "client";
    public static String incorrectLogin = "client_incorrect";
    public static String correctPassword = "pass_correct";
    public static String incorrectPassword = "pass_incorrect";

    public static WebElement createAccountField(WebDriver driver) {
        element = driver.findElement(By.id("email_create"));
        return element;
    }
    public static WebElement registeredEmailField(WebDriver driver) {
        element = driver.findElement(By.id("email"));
        return element;
    }
    public static WebElement registeredPasswordField(WebDriver driver) {
        element = driver.findElement(By.id("passwd"));
        return element;
    }
    public static WebElement registeredSubmitButton(WebDriver driver) {
        element = driver.findElement(By.id("SubmitLogin"));
        return element;
    }
    public static WebElement createAccountButton(WebDriver driver) {
        element = driver.findElement(By.id("SubmitCreate"));
        return element;
    }
}


这是我的LoginPageCorrectLogin类,它执行一个测试用例-正确登录到prestashop网站:

package testCases;
import pageObjects.HomePagePOM;
import pageObjects.LoginPagePOM;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;

public class LoginPageCorrectLogin {
    public static WebDriver driver = null;
    public static WebElement element = null;
    public static void main(String[] args) {
        driver = new FirefoxDriver();

        HomePagePOM.enterPage(driver); //Enter home site
        HomePagePOM.signIn(driver).click(); //Find Sign In option and click
        LoginPagePOM.registeredEmailField(driver).sendKeys(LoginPagePOM.correctLogin); // Input correct login to field
        LoginPagePOM.registeredPasswordField(driver).sendKeys(LoginPagePOM.correctPassword); //Input correct password to field
        LoginPagePOM.registeredSubmitButton(driver).click(); // Click on submit button
    }

}


我是Selenium的乞讨人,但我想使用最佳实践。这是对的吗?对于此示例,我将创建其他类,例如LoginPageCorrectPasswordLoginPageIncorrectLoginLoginPageIncorrectPassword
关于页面模型对象的任何建议将非常有帮助。

最佳答案

由于这是一个开放式问题,因此这里有一些一般性的提示:


您可能不希望多个页面输入正确的密码,
错误的密码等,因为最有可能的密码实际上并没有什么不同
页面。
将您的字符串(例如URL和用户名/密码)移动到
字符串表/资源文件/配置文件/内容。设置好
代码中的代码表示您被迫编辑代码,例如,
密码更改;还有许多其他负面因素。
对您的Page对象进行常规操作。简单的例子:
LoginPagePOM.login(username, password, isValidLogin)这样,您就不会到处重复登录代码,这很容易理解,并且如果/当您的登录页面更改时,您只需更改1个位置

10-07 19:52
查看更多