0

Проблема заключается в следующем: если я запускаю свои автозагрузки через maven (из командной строки OR eclipse), то они запускаются без проблем. Если я попытаюсь запустить через testng.xml (из eclipse), тогда мои тесты завершится с NullPointerException. В основном здесь мой pom.xml с системной переменной называется «браузер»Тест на селен можно запускать только через maven. Сбой с NullPointer при запуске с использованием XML-файла TestNG (поскольку системная переменная равна «null»)

<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-failafe-plugin (вы можете увидеть его в pom.xml). Любые предложения приветствуются.

ответ

0

Существует несколько способов решить эту проблему.

  1. Выполнение с использованием условных обозначений запуска. Задайте свойства, которые вы устанавливаете в pom в аргументах vm, и укажите файл своего пакета.

  2. В вашем xml определите параметры, которые вы можете прочитать с помощью прослушивателей, и установите статические переменные, которые можно передать в коде.

  3. Определить файл свойств, если system.getProperty (браузер) имеет значение null, затем прочитайте файл свойств и возьмите данные оттуда.

Смежные вопросы