【问题标题】:Error - "Cannot invoke "org.openqa.selenium.WebElement.sendKeys(java.lang.CharSequence[])" because "this.UserName" is null错误 - “无法调用“org.openqa.selenium.WebElement.sendKeys(java.lang.CharSequence[])”,因为“this.UserName”为空
【发布时间】:2021-08-29 14:39:54
【问题描述】:

我是 Java 和 Selenium 的新手。 下面是我的 POM、Driver Utilites 和 Test Case 的 java 类。

当我将测试用例作为 TestNG 测试运行时,我有: 失败:验证登录 java.lang.NullPointerException:无法调用“org.openqa.selenium.WebElement.sendKeys(java.lang.CharSequence[])”,因为“this.userName”为空。

请帮帮我。让我知道是否需要更多信息。 提前致谢。

package com.inetBankingV1.pageObjects;

import org.openqa.selenium.WebDriver;

import com.inetBankingV1.utilities.callBrowserDriver;

import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.How;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.Wait;
import org.openqa.selenium.support.ui.WebDriverWait;

public class LoginPage {
    
    WebDriver driver;
    
    @FindBy(how=How.LINK_TEXT, using="Log in")
    WebElement logUser;
    
    @FindBy(how=How.NAME, using="username")
    WebElement userName;
    
    @FindBy(how=How.NAME, using="password")
    WebElement passWord;
    
    
    //constructor
    public LoginPage(WebDriver driver)
    {
        this.driver=driver;
    }
    
    public  void loginCheck(String uname,String passwd)
    {
        userName.sendKeys(uname);
        passWord.sendKeys(passwd);
        logUser.click();
    }

}

    package com.inetBankingV1.utilities;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.remote.DesiredCapabilities;

public class callBrowserDriver {
    
    public WebDriver startApplication(String browser, String baseURL, WebDriver driver)
    
    {
    
    if(browser.equalsIgnoreCase("firefox"))
            {
        System.setProperty("webdriver.gecko.driver", "./Drivers/geckodriver.exe");
        FirefoxOptions firefoxOptions = new FirefoxOptions();
        firefoxOptions.setCapability("marionette", true);
         driver = new FirefoxDriver(firefoxOptions);
         
            }
    
    if(browser.equalsIgnoreCase("chrome"))
            {
        System.setProperty("webdriver.chrome.driver", "./Drivers/chromedriver.exe");
        driver=new ChromeDriver();
            }
    
    driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
    driver.manage().window().maximize();
    driver.navigate().to(baseURL);
    
    return driver;

}
    
}

    package com.inetBankingV1.testCases;

import com.inetBankingV1.utilities.callBrowserDriver;

import org.openqa.selenium.WebDriver;
import org.testng.annotations.Test;

import com.inetBankingV1.pageObjects.LoginPage;

public class TC2_VerifyLogin {

    WebDriver driver;
    callBrowserDriver browserDriver=new callBrowserDriver();

    @Test
    public void verifyLogin()
    {
        
        driver=browserDriver.startApplication("chrome","https://demosite.com/",this.driver);
        LoginPage login=new LoginPage(driver);

    login.loginCheck("admin","Password");   
    }
}

【问题讨论】:

  • 你的 login3DExp() 方法是在哪里定义的?
  • @itronic1990: 抱歉,函数是 loginCheck,它在 POM 类中
  • 您的网页中是否有名称 = 用户名的 web 元素?
  • 是的@itronic1990。同样在使用 initElements (我错过了)之后也没有看到问题。虽然我有找不到 webelemetn 的问题,但我应该弄清楚。

标签: java selenium page-factory


【解决方案1】:

看看这是否有效:-

 @FindBy(how=How.ID, using="inline-search-submit")
 WebElement logUser;
    
 @FindBy(how=How.NAME, using="user")
 WebElement userName;
    
 @FindBy(how=How.NAME, using="pass")
 WebElement passWord;
    

【讨论】:

  • 谢谢,但是在初始化 webelements 后,问的问题已经解决了。
【解决方案2】:

使用 initElements 初始化 POM 类的 webelements 后问题得到解决:

LoginPage login=PageFactory.initElements(driver, LoginPage.class);

【讨论】:

    【解决方案3】:
    Use below line in your constructor
    PageFactory.initElements( driver, this);
    
    ----------------------------------------------
    
    public LoginPage(WebDriver driver) 
        {
            this.driver=driver;
            PageFactory.initElements( driver, this);
        }
    
    This should solve your problem.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-18
      相关资源
      最近更新 更多