Selenium测试只能通过 maven 开始。开始使用 TestNG xml 文件时出现空指针失败(因为系统变量为"空")



问题如下-如果我通过maven(从命令提示符或eclipse)启动自动测试,那么它们运行时不会出现问题。如果我尝试通过testng.xml(从eclipse)启动,那么我的测试将失败,并出现NullPointerException。基本上,这里是我的pom.xml和名为"browser"的系统变量

<properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      <!-- Dependency versions -->
      <selenium.version>LATEST</selenium.version>
      <!-- Configurable variables -->
      <threads>3</threads>
      <browser>chrome</browser>
      <overwrite.binaries>false</overwrite.binaries>
   </properties>
   <build>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>2.19.1</version>
            <configuration>
               <parallel>methods</parallel>
               <threadCount>${threads}</threadCount>
               <systemPropertyVariables>
               <browser>${browser}</browser>
                  <!--Set properties passed in by the driverbinary downloader-->
                  <webdriver.chrome.driver>${webdriver.chrome.driver}</webdriver.chrome.driver>
                  <webdriver.ie.driver>${webdriver.ie.driver}</webdriver.ie.driver>
                  <webdriver.opera.driver>${webdriver.opera.driver}</webdriver.opera.driver>
               </systemPropertyVariables>

这是我用来检索"浏览器"变量的代码:

private final String browser=System.getProperty("browser").toUpperCase();

所以,测试总是在上面一行使用NullPointerException来停止执行。错误为:

FAILED: secondTest
java.lang.NullPointerException
    at DriverPackage.WebDriverThread.<init>(WebDriverThread.java:17)

BTW如果我以以下方式分配浏览器值(就像文本值一样):

private final String browser=("firefox").toUpperCase();

然后测试也通过Testng.xml运行。

====================

我的想法是,这与我的代码无关,而是与方法有关。也许有一些事情我不知道,那就是在TestNG的帮助下访问系统变量?我还想提到的是,我正在使用maven故障保护插件插件插件(你可以在pom.xml中看到它)。任何建议都将不胜感激。

有几种方法可以解决这个问题。

  1. 使用跑步确认进行跑步。在vm参数中设置您在pom中设置的属性,并指定您的套件文件。

  2. 在xml中,定义参数,可以使用侦听器读取这些参数,并设置代码中可以引用的静态变量。

  3. 定义一个属性文件,如果system.getProperty(browser)为null,则读取属性文件并从中获取数据。

最新更新