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

时间:2015-08-04 17:50:22

标签: java selenium selenium-webdriver junit

我正在使用硒建立测试。我试图遵循一些教程并在这里查看信息,但我无法弄清楚为什么我的测试无法正常运行。

我有以下测试设置类

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...");

}
}

然后我有一个测试类来登录这里

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());
}
}

我当前的出局是

  

开始测试......

     

正在测试的登录功能......

     

java.lang.NullPointerException

     

在   verifyURL(LoginPage.java:20)

     

在   verifyLoginInFunction(LoginPageTest.java:28)

     

     

     

     

开始测试......

     

处理以退出代码-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>

1 个答案:

答案 0 :(得分:0)

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

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

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

看起来你的初始化只是被JUnit忽略了。 (这并不表示任何形式的错误或警告?)

这是否直接导致你的空指针异常,我们不能说。这是在verifyURL课程的LoginPage方法的第20行进行的,该问题并未包括在内。虽然这似乎是一个合理的结论。