使用 Page Factory Design 和 Page Object Model 的测试使用 Selenium 和 Java 打开浏览器的两个实例

Tests using Page Factory Design and Page Object Model opens two instances of the browser using Selenium and Java

我在带有页面对象模型的 Selenium WebDriver 中进行了测试,如果我 运行 下面的测试在 Chrome 浏览器中打开两个 windows,第一个 window 是在 URL 行中为空。我怎么能只用 onet.pl URL 打开一个? 我尝试删除初始化 Chrome 驱动程序,但会出现 null.exception 错误。 我做错了什么?

package Pages;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.FindBy;

public class LoginPage {
    private WebDriver driver;
    //private WebDriverWait wait;

    public LoginPage() {
        this.driver = new ChromeDriver();
        //wait = new WebDriverWait(driver,10);
    }
    @FindBy(xpath="//div[@class='col-md-12']//form")
    private WebElement loginForm;

    @FindBy(id="username")
    private WebElement loginField;

    @FindBy(id="password")
    private WebElement passwordField;

    @FindBy(xpath="//button[@class='btn btn-multisport-default btn-multisport-large btn-full-width login-button']")
    private WebElement buttonLogin;
    public void open() {
        driver.get("https://onet.pl");
    }
    public void enterLogin() {
        String login = "vadim1234@test.pl";
        loginField.sendKeys(login);
    }
    public void enterPassword() {
        String password = "Benefit!";
        passwordField.sendKeys(password);
    }
    public void login() {

        buttonLogin.click();
    }
}

和测试代码:

import Pages.Dashboard;
import Pages.LoginPage;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.PageFactory;

import java.util.concurrent.TimeUnit;

public class LogIn {
    @Test
    public void correctLogin() {
        System.setProperty("webdriver.chrome.driver", "src/main/resources/chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        LoginPage loginPage = PageFactory.initElements(driver, LoginPage.class);
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

        loginPage.open();
        loginPage.enterLogin();
        loginPage.enterPassword();
        loginPage.login();
        driver.close();
        driver.quit();
        Dashboard dashboard = new Dashboard(driver);
        dashboard.getLoggedUser();
    }
}

来自您的 test class,因为您正在传递 driver 的引用:

LoginPage loginPage = PageFactory.initElements(driver, LoginPage.class);

In LoginPage class,在构造函数中,而不是:

public LoginPage() {
    this.driver = new ChromeDriver();
    //wait = new WebDriverWait(driver,10);
}

您需要按如下方式重用传递的实例:

public LoginPage(WebDriver loginPageDriver) {
    this.driver=loginPageDriver;
}

这将解决打开 2 个浏览器的问题。


参考资料

您可以在以下位置找到一些相关的详细讨论: