【问题标题】:TestNG Parameterisation: NullPointerException when passing browser type to Base classTestNG 参数化:将浏览器类型传递给基类时出现 NullPointerException
【发布时间】:2019-03-12 15:39:40
【问题描述】:

我有一个 Base 类,其中有一个方法可以打开我的 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(); 
      }
}

这是我的基类:

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 在“删除所有 cookie”行失败并出现空指针异常(并且我的行“错误:无法识别浏览器请求”正在控制台中打印),表明字符串没有作为参数到达 openURL。可以有人看到我做错了吗?

【问题讨论】:

    标签: java selenium testng parameter-passing


    【解决方案1】:

    由于browser 是一个字符串变量,您需要使用equalscontainsequalsIgnoreCase 来检查您正在获取的browser 是“Chrome”还是“Firefox”。

    所以您需要使用:if(browser.equals("Chrome"))if(browser.equals("Firefox")) 作为条件,而不是您使用的条件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-08
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      • 2019-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多