使用 JUnit 和 Selenium WebDriver 时浏览器未启动

Browser not launching when using JUnit and Selenium WebDriver

我正在使用 selenium 构建测试。我试图遵循一些教程并查看此处的信息,但我无法弄清楚为什么我的测试不会 运行 正确。

我有以下测试设置class

import org.junit.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;

import java.util.Arrays;

public class TestSetUp {

private WebDriver driver;

public WebDriver getDriver() {
    return driver;
}

private void setDriver(int type, String url) {

    switch (type) {
        case Config.FIREFOX_DRIVER:
            System.out.println("Setting drivers for Firefox...");
            driver = initFireFoxDriver(url);
            break;
        default:
            System.out.print("invalid browser type");
    }
}

private static WebDriver initFireFoxDriver(String url) {
    System.out.println("Launching Firefox browser...");
    WebDriver driver = new FirefoxDriver();
    driver.manage().window().maximize();
    driver.navigate().to(url);
    return driver;
}

@BeforeClass
public void initializeTestBaseSetup(int type, String url) {
    try {
        setDriver(1, "google.com");
    } catch (Exception e) {
        System.out.println("Error....." + Arrays.toString(e.getStackTrace()));
    }
}

@AfterClass
public void tearDown() {
    driver.quit();
}

@Test
public void startTests() {
    System.out.println("Starting Tests...");

}
}

然后我有一个测试class 在这里登录

public class LoginPageTest extends TestSetUp {

private WebDriver driver;

@Before
public void setUp() {
    driver = getDriver();
}

@Test
public void verifyLoginInFunction() {
    System.out.println("Log In functionality being tested...");

    LoginPage loginPage = new LoginPage(driver);

    Assert.assertTrue("The url is incorrect", loginPage.verifyURL());
    Assert.assertTrue("Title did not match", loginPage.verifyLoginTitle());
    Assert.assertTrue("Error message did not match", loginPage.verifySignIn());
    Assert.assertTrue("\'Forgot Password?\' link is missing", loginPage.verifyForgotPassword());
    Assert.assertTrue("Create Account setting not working", loginPage.verifyCreateAccount());
    Assert.assertTrue("Additional Licence Key setting not working", loginPage.verifyLicencing());

    HomePage homePage = loginPage.signIn(Config.STUDENT, Config.STUDENTPASS);

    Assert.assertTrue("Login did not work", homePage.verifyURL());
}
}

我目前的输出是

Starting Tests...

Log In functionality being tested...

java.lang.NullPointerException

at verifyURL(LoginPage.java:20)

at verifyLoginInFunction(LoginPageTest.java:28)

.

.

.

Starting Tests...

Process finished with exit code -1

我确实在这里省略了我的包的路径,但我不明白为什么浏览器无法启动。它从不执行 initializeTestBaseSetup,因此它不会进入设置的其余部分。任何帮助或链接将不胜感激。

已修复:我需要将 xml 文件添加到 运行 而不是测试套件。这是我的 testing.xml

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Page Object test example">
    <parameter name="url" value="http://google.com/"/>
    <parameter name="type" value="firefox"/>
    <test name="sample test">
        <classes>
            <class name="LoginPageTest"/>
        </classes>
    </test>
</suite>

根据 the docs@BeforeClass 方法应该是 static 并且应该没有参数:

public static void initializeTestBaseSetup() {
    // ...
}

这是必要的,因为顾名思义,这是在实例化对象本身之前调用的。由于框架无法知道为参数提供什么,因此它无法将任何内容传递给该方法。

结果,您的初始化似乎只是被 JUnit 忽略了。 (这不会显示为任何类型的错误或警告?)

这是否直接导致你的空指针异常,我们不好说。这发生在您的 LoginPage class 的 verifyURL 方法的第 20 行,这不包括在问题中。虽然这似乎是一个合理的结论。