使用 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 行,这不包括在问题中。虽然这似乎是一个合理的结论。
我正在使用 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 行,这不包括在问题中。虽然这似乎是一个合理的结论。