当前位置: 首页 > 知识库问答 >
问题:

“java.lang.空点异常”时尝试单击页面中的任何元素

丁书
2023-03-14

直到昨天,代码都运行得很好。现在,当我尝试运行任何测试用例时,Selenium(使用Java)会在主页本身抛出java.lang.NullPointerException。下面是一个由于错误而失败的简单测试用例。

下面是我的测试类,它调用TestBase类的构造函数,然后初始化驱动程序对象。当控件进入<code>主页时。单击SearchLink()方法,测试结束,错误出现。

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类,它调用测试基类的构造函数并初始化驱动程序对象

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());

}

错误日志:

[Remote teTestNG]在端口21677上检测到TestNG版本6.11.0启动ChromeDriver 2.41.578737(49da6702b16031c40d63e5618de03a32ff6c197e)只允许本地连接。log4j: WARN找不到logger(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:58DefaultElementLocator.java:69创建会话信息:检测到的方言: OSS驱动程序=ChromeDriver: XP上的chrome(ac62d0828d89443b9bedefa67a824225)在之后导航到org.openqa.selenium.support.pagefactory.internal.LocatingElementHandler.invoke失败配置:@BeforeMethod在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/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(org.openqa.selenium.remote.ProtocolHandshake)在https://www.ss.com/en(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/jdk.内在.反射。委托方法访问程序调用(委托方法访问程序)在java. base/java. lang.反射.方法调用(方法)在org. testng. interal. Invoker.调用测试方法(Invoker. java: 1193)在org. testng. interal. TestmetodWorker.调用测试方法(TestmetodWorker. java: 126)在org. testng. interal. TestmetodWorker. run(TestmetodWorker. java: 109)在org. testng. TestRunner. Private ateRun(TestRunner. java: 744)在org. testng. TestRunner. run(TestRunner. java: 602)在org. testng. SuiteRunner. runTest(SuiteRunner. java: 380)在org. testng. SuiteRunner. run依次(SuiteRunner. java: 375)在org. testng. SuiteRunner. run(SuiteRunner. java: 340)

建议。

共有2个答案

吴开宇
2023-03-14

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

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

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

}~

子车新立
2023-03-14

WebEventListener.java:31:保持空检查,您正在使用的元素之一是抛出空指针异常。

如果你能在第31行张贴WebEventListener.java的印刷内容,那么我们能更好地检查问题。为此,请更改以下代码行:

public void afterFindBy(By arg0, WebElement arg1, WebDriver arg2) { 
  System.out.println("Find happened on " + arg1 + " Using method " + arg0); 
} 
 类似资料:
  • 直到昨天,代码还完全正常运行。现在,当我试图运行任何测试用例时,Selenium(使用Java)在主页本身抛出Java.lang.NullPointerException。下面是一个由于错误而失败的简单测试用例。 下面是我的测试类,它正在调用TestBase类的构造函数,然后初始化驱动程序对象。当控件进入方法时,测试结束并出现错误。 下面是我的TestBase类,它正在调用Test基类的构造函数并

  • 单击Delete按钮时,应用程序崩溃。 2020-03-01 22:50:55.461 168 00-16800/com.solutions.rsaggarwal E/AndroidRuntime:致命异常:主进程:com.solutions.rsaggarwal,PID:16800 java.lang.NullPointerException:尝试在com.solutions.rsaggarwa

  • 我最近将selenium升级到最新版本(2.53),将firefox升级到最新版(45.0.1)。 我在相同的网站上运行相同的代码,但我突然有很多这样的例外: Web 驱动程序异常: 消息: 元素在点 (312, 8.816665649414062) 不可单击。其他元素将收到单击: 例如: 有什么我应该注意的新东西吗?我之前的python selenium版本相当旧,而且我在Firefox 38上

  • 我得到java.lang.NoSuch方法例外请帮助我在这... 这就是我得到的错误- 错误:java.lang.运行时异常:java.lang.NoSuchmethod异常:com.nielsen.GRFE.processor.mapreduce.占位符$PlaceholderMapper.()在org.apache.hadoop.util.Reflse Utils.new实例(Reflse U

  • 由于以下异常,我的脚本失败了。 WebDriverException:未知错误:在点(355,160)处不能单击元素 在加载页面时,如果元素出现在背景中,selenium会尝试单击,但失败。我使用过WebDriverWait。在10次中,它至少失败了3次。 在不使用thread.sleep()的情况下如何避免/处理这种情况;

  • 我有4个图像作为按钮,当选择正确的按钮时,会出现一个工作正常的箭头按钮。 我的问题是,我试图更改每个按钮的后台资源以在单击此箭头时进行更改,但我在该行得到一个空指针异常: 我已经在java onCreate中声明了nextArrow按钮- 类别: 日志: XML: 我错过了什么明显的东西吗?