TestNG 参数化:将浏览器类型传递给 Base 时出现 NullPointerException class
TestNG Parameterisation: NullPointerException when passing browser type to Base class
我有一个 Base class,它有一个打开我的 URL 的方法,在我的测试用例中称为 @BeforeMethod。该方法采用浏览器类型的字符串参数来确定调用哪个浏览器。我正在尝试在我的 xml 启动文件中设置一个参数,该参数可以作为 openURL 方法的参数输入到我的@BeforeMethod 中。
这是我的 XML 文件:
<?xml version="1.0" encoding="UTF-8"?>
<suite name="FullRegressionSuite" parallel="false">
<listeners>
<listener class-name="reporting.CustomReporter"></listener>
</listeners>
<test name="Test">
<parameter name ="browserType" value="Chrome"/>
<classes>
<class name="reporting.reporterTest"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
这是我的测试:
@Listeners(CustomListener.class)
public class reporterTest extends Base {
@Test
public void testOne() {
Assert.assertTrue(true);
}
@Test
public void testTwo() {
Assert.assertTrue(false);
}
@Parameters({ "browserType" })
@BeforeMethod
public void setUp(String browserType) throws InterruptedException {
System.out.println(browserType);
openURL(browserType);
}
@AfterMethod
public void tearDown() {
driver.quit();
}
}
这是我的基地class:
public class Base {
public static WebDriver driver = null;
//CALL WEB BROWSER AND OPEN WEBSITE
public static void openURL(String browser) throws InterruptedException {
//launches browser based on argument given
try{
if (browser == "Chrome") {
System.setProperty("webdriver.chrome.driver", "/Users/rossdonohoe/Desktop/SeleniumJava/Drivers/chromedriver");
driver = new ChromeDriver();
}
else if (browser == "Firefox") {
System.setProperty("webdriver.gecko.driver", "/Users/rossdonohoe/Desktop/SeleniumJava/Drivers/geckodriver");
driver = new FirefoxDriver();
}
else {
System.out.println("Error: browser request not recognized");
}
driver.manage().deleteAllCookies();
driver.manage().window().maximize();
driver.get("https://www.google.com");
}
catch(Exception E) {
E.printStackTrace();
}
}
}
我的@BeforeMethod 确实收到了参数,因为我正在打印它的值以进行检查,并且我在控制台中得到 "Chrome"。但是,openURL 在 'delete all cookies' 行失败并出现空指针异常(我的行“错误:浏览器请求未识别”正在控制台中打印),表明该字符串未达到打开状态URL 作为论据。有人能看出我做错了什么吗?
由于browser
是一个字符串变量,你需要使用equals
或contains
或equalsIgnoreCase
来检查你的browser
是否是提取是 "Chrome" 或 "Firefox"。
所以您需要使用:if(browser.equals("Chrome"))
和if(browser.equals("Firefox"))
作为条件,而不是您已经使用的条件。
我有一个 Base class,它有一个打开我的 URL 的方法,在我的测试用例中称为 @BeforeMethod。该方法采用浏览器类型的字符串参数来确定调用哪个浏览器。我正在尝试在我的 xml 启动文件中设置一个参数,该参数可以作为 openURL 方法的参数输入到我的@BeforeMethod 中。
这是我的 XML 文件:
<?xml version="1.0" encoding="UTF-8"?>
<suite name="FullRegressionSuite" parallel="false">
<listeners>
<listener class-name="reporting.CustomReporter"></listener>
</listeners>
<test name="Test">
<parameter name ="browserType" value="Chrome"/>
<classes>
<class name="reporting.reporterTest"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
这是我的测试:
@Listeners(CustomListener.class)
public class reporterTest extends Base {
@Test
public void testOne() {
Assert.assertTrue(true);
}
@Test
public void testTwo() {
Assert.assertTrue(false);
}
@Parameters({ "browserType" })
@BeforeMethod
public void setUp(String browserType) throws InterruptedException {
System.out.println(browserType);
openURL(browserType);
}
@AfterMethod
public void tearDown() {
driver.quit();
}
}
这是我的基地class:
public class Base {
public static WebDriver driver = null;
//CALL WEB BROWSER AND OPEN WEBSITE
public static void openURL(String browser) throws InterruptedException {
//launches browser based on argument given
try{
if (browser == "Chrome") {
System.setProperty("webdriver.chrome.driver", "/Users/rossdonohoe/Desktop/SeleniumJava/Drivers/chromedriver");
driver = new ChromeDriver();
}
else if (browser == "Firefox") {
System.setProperty("webdriver.gecko.driver", "/Users/rossdonohoe/Desktop/SeleniumJava/Drivers/geckodriver");
driver = new FirefoxDriver();
}
else {
System.out.println("Error: browser request not recognized");
}
driver.manage().deleteAllCookies();
driver.manage().window().maximize();
driver.get("https://www.google.com");
}
catch(Exception E) {
E.printStackTrace();
}
}
}
我的@BeforeMethod 确实收到了参数,因为我正在打印它的值以进行检查,并且我在控制台中得到 "Chrome"。但是,openURL 在 'delete all cookies' 行失败并出现空指针异常(我的行“错误:浏览器请求未识别”正在控制台中打印),表明该字符串未达到打开状态URL 作为论据。有人能看出我做错了什么吗?
由于browser
是一个字符串变量,你需要使用equals
或contains
或equalsIgnoreCase
来检查你的browser
是否是提取是 "Chrome" 或 "Firefox"。
所以您需要使用:if(browser.equals("Chrome"))
和if(browser.equals("Firefox"))
作为条件,而不是您已经使用的条件。