问题如下-如果我通过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中看到它)。任何建议都将不胜感激。
有几种方法可以解决这个问题。
-
使用跑步确认进行跑步。在vm参数中设置您在pom中设置的属性,并指定您的套件文件。
-
在xml中,定义参数,可以使用侦听器读取这些参数,并设置代码中可以引用的静态变量。
-
定义一个属性文件,如果system.getProperty(browser)为null,则读取属性文件并从中获取数据。