尝试单击页面中的任何元素时,“ java.lang.NullPointerException”

时间:2018-09-09 07:33:53

标签: selenium-chromedriver browser-automation

代码运行良好,直到昨天。现在,当我尝试运行任何测试用例时,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   端口21677上的2.41.578737(49da6702b16031c40d63e5618de03a32ff6c197e)仅允许本地连接。 log4j:WARN可能没有附加程序   找到记录器(org.apache.http.client.protocol.RequestAddCookies)。   log4j:WARN请正确初始化log4j系统。 log4j:WARN请参阅   http://logging.apache.org/log4j/1.2/faq.html#noconfig了解更多信息。   2018年9月9日9:10:58 org.openqa.selenium.remote.ProtocolHandshake   createSession INFO:检测到的方言:OSS driver = ChromeDriver:chrome   在XP上(ac62d0828d89443b9bedefa67a824225)在afterNavigateTo到   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(本机   方法)   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(本机   方法)   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)     在org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)

请提出建议。

2 个答案:

答案 0 :(得分:0)

WebEventListener.java:31,保留null check,这是您使用的引发null指针异常的元素之一。如果您可以在第31行中发布WebEventListener.java的内容。那么我们可以进行准确地检查。 更改此行:- public void afterFindBy(通过arg0,WebElement arg1,WebDriver arg2){System.out.println(“查找发生在” + arg1 +“使用方法” + arg0); }

答案 1 :(得分:0)

根据您的评论,“当控件进入homepage.clickSearchLink()方法时,测试结束并出现错误。”

检查此方法“ homepage.clickSearchLink()”是否返回搜索页实例。 该方法应为

input.each( function(){
  debugn(this)
} );

}〜