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

在Selenium WebDriver中获取java.lang.NullPointerException

羊舌兴德
2023-03-14

在Eclipse中运行testcase时,我将获得java.lang.NullPointerException。有人能帮我指出我犯的错误吗?

错误@Line 17:loginpage.java中的WebElement。@Line 12:tc_logineTwin_001.java中的LoginPage。

**LoginPage.Java**

package com.internetBanking.pageObjects;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;

public class LoginPage {
    
    WebDriver driver;
    
    public LoginPage (WebDriver driver) {
            
        this.driver = driver;
        
    }
    
    WebElement usrname = driver.findElement(By.name("uid"));
    WebElement pwd = driver.findElement(By.name("password"));
    WebElement login = driver.findElement(By.name("btnLogin"));
    
    public void setUsrname(String uname) {
        usrname.sendKeys(uname);
    }

    public void setPwd(String pswd) {
        pwd.sendKeys(pswd);
    }

    public void login() {
        
        login.click();
    }

}

**TC_LoginTest_001.java**

package com.internetBanking.testCases;
import org.testng.annotations.Test;
import com.internetBanking.pageObjects.LoginPage;
public class TC_LoginTest_001 extends BaseClass {
    
    @Test
    public void LoginTest() {
                
        driver.get(baseURL);
        logger.info("URL is opened");
        
        LoginPage loginPage = new LoginPage(driver);
        
        loginPage.setUsrname(username);
        logger.info("Username is entered");
        
        loginPage.setPwd(password);
        logger.info("Password is entered");
        
        loginPage.login();                                         
        logger.info("Login button is clicked");
        
    }
}

当我运行测试用例时,我得到以下错误:

java.lang.NullPointerException在com.internetbanking.pageobjects.loginpage.(loginpage.java:17)在com.internetbanking.testcases.tc_logineter_001.java:12)在sun.reflect.nativeMethodAccessorImpl.Invoke0(原生方法)在sun.reflect.nativeMethodAccessorImpl.Invoke(未知源)在sun.reflect.delegatingmethodAccessorImpl.Invoke(未知源)在r.runtest(Suiterunner.java:455)在org.testng.suiterunner.runsequency(Suiterunner.java:450)在org.testng.suiterunner.privaterun(Suiterunner.java:415)在org.testng.suiterunner.java:364)在org.testng.suiterunner.runsuite(Suiterunner.java:52)在org.testng.suiterunnerworker.runsuite(Suiterunner.java:52)在

共有1个答案

梁兴修
2023-03-14

请考虑以下代码:

public class MainTest {
    public static void main(String[] args) {
        new Test(new Object());
    }
}

class Test {
    InitMe initMe = new InitMe();
    public Test(Object o){
        System.out.println("Test instance has been created");
    }
}

class InitMe{
    public InitMe(){
        System.out.println("Init me instance has been created");
    }
}

如果运行它,您将看到以下输出:

Init me instance has been created
Test instance has been created

这意味着在执行构造函数之前初始化字段。因此在您的情况下,您有以下结构:

public class MainTest {
    public static void main(String[] args) {
        new Test(new Object());
    }
}

class Test {
    Object o;
    String oStr = o.toString();
    public Test(Object o){
        this.o = o;
    }
}
    WebDriver driver;
    
    public LoginPage (WebDriver driver) {
            
        this.driver = driver;
        
    }
    
    WebElement usrname = driver.findElement(By.name("uid"));
    WebElement pwd = driver.findElement(By.name("password"));
    WebElement login = driver.findElement(By.name("btnLogin"));
    WebDriver driver;
    WebElement usrname;
    WebElement pwd;
    WebElement login;
    
    public LoginPage (WebDriver driver) {
        this.driver = driver;
        usrname = driver.findElement(By.name("uid"));
        pwd = driver.findElement(By.name("password"));
        login = driver.findElement(By.name("btnLogin"));}
    }
 类似资料:
  • 我正在使用Selenium(Java版本)测试一个基于OpenLayers的API。 我想测试一个使用的功能。控制修改功能。我想单击绘制的特征(SVG),然后拖动并检查它们是否存在、可见或隐藏。 我已经画了一个多边形,并且选择了它。见下图: 这些SVG元素的HTML如下所示: 假设我想选择红点。 我试过: 但是它总是返回一个空列表。 我做错了什么?有人能帮我吗? 多谢了。 编辑1-功能:垂直显示可

  • 问题陈述:我试图在网页上获取span标记的值。*该网页上有多个span标记,其中我需要4个。

  • 问题内容: 今天,当我使用Selenium WebDrive时,出现错误。我的平台是mac osx。这是我的异常日志。 我不知道为什么会这样。我的Firefox路径是默认路径。谢谢您的帮助!! 问题答案: WebDriver使用端口7054(“锁定端口”)作为互斥体,以确保我们不会同时启动两个Firefox实例。您创建的每个新实例将在启动浏览器之前等待互斥体,然后在浏览器打开后立即释放互斥体。 因

  • 问题内容: 我如何在seleniumwebdriver 3.0 beta版本中使用geckodriver。当我实例化Firefox时: 我得到错误: 线程“主”中的异常java.lang.IllegalStateException:驱动程序可执行文件的路径必须由webdriver.gecko.driver系统属性设置;否则,必须执行以下操作:有关更多信息,请参见 https://github.co

  • 我是编码新手。以我的知识在已经成功登录。在主页中,当我单击指定的链接时,它会在新选项卡中打开,这是预期的行为。现在,当我尝试点击新打开的选项卡中的元素时,我没有得到这样的元素异常,因为驱动程序实例指向第一个选项卡,而不是第二个选项卡。如何获取新打开的标签页的驱动程序实例。下面是我使用的代码。 //这是基类。 //这是登录测试。 //在新打开的标签中,我需要点击一些元素。这是我正在使用的代码。 请帮

  • 我实际上有三个问题: Selenium WebDriver如何实现此 因为我们不能给无限睡眠的线程一个负值。 有没有更好的方法来实现无限等待? 我们在SeleniumWebDriver文档中看到了这一点