«java.lang.NullPointerException» при попытке щелкнуть любой элемент на странице - PullRequest
0 голосов
/ 09 сентября 2018

Код работал полностью до вчерашнего дня. Теперь, когда я пытаюсь запустить любой тестовый пример, Selenium (используя Java) создает исключение java.lang.NullPointerException на самой домашней странице. Ниже приведен простой тестовый пример, который не выполняется из-за ошибки.

Ниже мой класс Test, который вызывает конструктор класса TestBase и затем инициализирует объект драйвера. Когда управление переходит в метод homepage.clickSearchLink(), тест завершается и появляется ошибка.

package com.ss.qa.testcases;

import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import org.openqa.selenium.chrome.*;
import com.ss.qa.base.TestBase;
import com.ss.qa.pages.HomePage;
import com.ss.qa.pages.SearchPage;

public class SearchPageTest extends TestBase{

HomePage homepage;
SearchPage searchpage;

SearchPageTest(){
    super();
}

@BeforeMethod
public void setUp(){
    initialization();
    homepage = new HomePage();
    searchpage = homepage.clickSearchLink();
}

@Test
public void verifyResultCount() {
    int count = searchpage.countResults("a");
    Assert.assertEquals(count, 15);
}   

@AfterMethod
public void tearDown() {
    driver.quit();
    }
}

Ниже приведен мой класс TestBase, который вызывает конструктор класса Test Base и инициализирует объект драйвера

package com.ss.qa.base;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Driver;
import java.util.Properties;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.events.EventFiringWebDriver;

import com.ss.qa.util.TestUtil;
import com.ss.qa.util.WebEventListener;


public class TestBase {

public static WebDriver driver = null;
public static Properties prop;
public static EventFiringWebDriver e_driver;
public static WebEventListener eventListener;

public TestBase(){       
try {
         prop = new Properties();
         FileInputStream ip = new FileInputStream("D:\\Users\\eclipse- 
workspace\\src\\main\\java\\com\\ss\\qa\\config\\config.properties");
         prop.load(ip);

     } catch (FileNotFoundException e) {
         e.printStackTrace();            
     } catch (IOException e) {
         e.printStackTrace();
     }      
 }

 public static void initialization() {

        String browserName = prop.getProperty("browser");
         if (browserName.equalsIgnoreCase("chrome")) {
              System.setProperty("webdriver.chrome.driver", "C:\\Users\\Downloads\\"chromedriver_win32\\chromedriver.exe");

              driver = new ChromeDriver();  
              System.out.println("driver=" + driver); 
         }       
         else if (browserName.equalsIgnoreCase("FF")) {
              System.setProperty("webdriver.gecko.driver", "C:\\Users\\Downloads\\geckodriver-v0.21.0-win64\\geckodriver.exe");
              driver = new FirefoxDriver();           
         }

         e_driver = new EventFiringWebDriver(driver);
         eventListener = new WebEventListener();
         e_driver.register(eventListener);
         driver = e_driver;

         driver.manage().window().maximize();
         driver.manage().deleteAllCookies();
         driver.manage().timeouts().pageLoadTimeout(TestUtil.PAGE_LOAD_TIMEOUT , TimeUnit.SECONDS);
         driver.manage().timeouts().implicitlyWait(TestUtil.IMPLICIT_WAIT , TimeUnit.SECONDS);
         driver.get(prop.getProperty("url"));
    }

}

<!-- Method in Event Listener class which is showing in error -->

    public void afterFindBy(By arg0, WebElement arg1, WebDriver arg2) {
    System.out.println("Find happened on " + arg1.toString() + " Using method " + arg0.toString());

}

ЖУРНАЛ ОШИБКИ:

[RemoteTestNG] обнаружен TestNG версии 6.11.0. Запуск ChromeDriver 2.41.578737 (49da6702b16031c40d63e5618de03a32ff6c197e) через порт 21677 Разрешены только локальные соединения. log4j: ВНИМАНИЕ! найдено для регистратора (org.apache.http.client.protocol.RequestAddCookies). log4j: WARN Пожалуйста, правильно инициализируйте систему log4j. log4j: WARN См. http://logging.apache.org/log4j/1.2/faq.html#noconfig для получения дополнительной информации. 09 сентября 2018 9:10:58 org.openqa.selenium.remote.ProtocolHandshake createSession INFO: обнаруженный диалект: драйвер OSS = ChromeDriver: chrome на XP (ac62d0828d89443b9bedefa67a824225) Внутри afterNavigate, чтобы https://www.ss.com/en СБОЙ КОНФИГУРАЦИИ: @BeforeMethod setUp java.lang.NullPointerException в com.ss.qa.util.WebEventListener.afterFindBy (WebEventListener.java:31) в java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Метод) в java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) в java.base / jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) в java.base / java.lang.reflect.Method.invoke (Method.java:564) в org.openqa.selenium.support.events.EventFiringWebDriver $ 1.invoke (EventFiringWebDriver.java:81) в com.sun.proxy. $ Proxy9.afterFindBy (Неизвестный источник) в org.openqa.selenium.support.events.EventFiringWebDriver.findElement (EventFiringWebDriver.java:189) в org.openqa.selenium.support.pagefactory.DefaultElementLocator.findElement (DefaultElementLocator.java:69) в org.openqa.selenium.support.pagefactory.internal.LocatingElementHandler.invoke (LocatingElementHandler.java:38) в com.sun.proxy. $ Proxy12.isDisplayed (неизвестный источник) в com.ss.qa.pages.HomePage.clickSearchLink (HomePage.java:67) в com.ss.qa.testcases.SearchPageTest.setUp (SearchPageTest.java:25) в java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Метод) в java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) в java.base / jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) в java.base / java.lang.reflect.Method.invoke (Method.java:564) в org.testng.internal.MethodInvocationHelper.invokeMethod (MethodInvocationHelper.java:108) в org.testng.internal.Invoker.invokeConfigurationMethod (Invoker.java:523) в org.testng.internal.Invoker.invokeConfigurations (Invoker.java:224) в org.testng.internal.Invoker.invokeMethod (Invoker.java:599) в org.testng.internal.Invoker.invokeTestMethod (Invoker.java:869) в org.testng.internal.Invoker.invokeTestMethods (Invoker.java:1193) в org.testng.internal.TestMethodWorker.invokeTestMethods (TestMethodWorker.java:126) в org.testng.internal.TestMethodWorker.run (TestMethodWorker.java:109) в org.testng.TestRunner.privateRun (TestRunner.java:744) в org.testng.TestRunner.run (TestRunner.java:602) в org.testng.SuiteRunner.runTest (SuiteRunner.java:380) в org.testng.SuiteRunner.runSequentially (SuiteRunner.java:375) в org.testng.SuiteRunner.privateRun (SuiteRunner.java:340) в org.testng.SuiteRunner.run (SuiteRunner.java:289) в org.testng.SuiteRunnerWorker.runSuite (SuiteRunnerWorker.java:52) вorg.testng.SuiteRunnerWorker.run (SuiteRunnerWorker.java:86) в org.testng.TestNG.runSuitesSequentially (TestNG.java:1301) в org.testng.TestNG.runSuitesLocally (TestNG.java:1226) в org.testng.TestNG.runSuites (TestNG.java:1144) в org.testng.TestNG.run (TestNG.java:1115) в org.testng.remote.AbstractRemoteTestNG.run (AbstractRemoteTestNG.java:114) в org.testng.remote.RemoteTestNG.initAndRun (RemoteTestNG.java:251) atg.testng.remote.RemoteTestNG.main (RemoteTestNG.java:77)

Просьба предложить.

Ответы [ 2 ]

0 голосов
/ 31 июля 2019

Согласно вашему комментарию «Когда элемент управления переходит в метод homepage.clickSearchLink (), тест завершается и появляется ошибка.»

проверьте, возвращает ли этот метод homepage.clickSearchLink () экземпляр страницы поиска. метод должен быть

~public Searchpage clickSearchLink(){
   //click on element to get search page 
  //Also check whether element is present on page or not.
  return new Searchpage();

} ~

0 голосов
/ 09 сентября 2018

WebEventListener.java:31: оставьте пустую отметку, один из используемых вами элементов вызывает исключение нулевого указателя.

Если вы можете опубликовать печатный контент файла WebEventListener.java в строке 31, тогда мы можем лучше изучить проблему. Для этого измените эту строку:

public void afterFindBy(By arg0, WebElement arg1, WebDriver arg2) { 
  System.out.println("Find happened on " + arg1 + " Using method " + arg0); 
} 
...