使用SendKeys时Selenium中的NullpointerException

我有三节课。 一个用于从网页获取所有元素,一个用于使用这些元素执行操作,一个用于测试脚本。 当我从测试脚本调用一个函数时,我得到一个空指针exception。 我想出这是因为我使用@FindBy注释,但我不知道如何解决这个问题。

元素类:

public class LoginPageElements { @FindBy(id="loginId") private static WebElement userNameTextBox; @FindBy(id="password") private static WebElement userPasswordTextBox; @FindBy(id="QTP_LoginButton") private static WebElement loginButton; public static WebElement getUserNameTextBox(WebDriver driver){ WebElement a=driver.findElement(By.id("loginId")); return a; } public static WebElement getUserPasswordTextBox(){ return userPasswordTextBox; } public static WebElement getLoginButton(){ return loginButton; } } 

行动类:

 public class LoginPageActions { public static void login(WebDriver driver,String username,String password){ WebElement a=LoginPageElements.getUserNameTextBox(driver); a.sendKeys(username); LoginPageElements.getUserPasswordTextBox().sendKeys(password); LoginPageElements.getLoginButton().click(); } } 

测试脚本:

 public class Sample { public static String driverPath = "D:/Selenium/Chrome Driver latest/chromedriver.exe"; public static WebDriver driver; public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", driverPath); ChromeOptions options = new ChromeOptions(); options.addArguments("test-type"); options.addArguments("start-maximized"); options.addArguments("--js-flags=--expose-gc"); options.addArguments("--enable-precise-memory-info"); options.addArguments("--disable-popup-blocking"); options.addArguments("--disable-default-apps"); options.addArguments("--enable-automation"); options.addArguments("test-type=browser"); options.addArguments("disable-infobars"); options.addArguments("--disable-extensions"); options.setExperimentalOption("useAutomationExtension", false); driver = new ChromeDriver(options); driver.get("http://10.235.80.106:8080"); LoginPageActions.login(driver,"acb", "adasd"); } 

将WebDriver对象从测试脚本传递给元素类时没有exception。 当我使用由FindBy注释初始化的元素时,会出现问题,因为没有WebDriver实例化。 我该如何解决? 谢谢

您可以继续使用您需要的@FindBy注释来确保初始化WebElements。 为此,您应该使用PageFactory初始化您的LoginPageElements:

 LoginPageElements loginPageElements = PageFactory.initElements(webDriver, LoginPageElements.class); 

其中webDriver是您用于运行selenium测试的WebDriver的实例。

您需要声明WebDriver实例并在LoginPageElementsLoginPageActions类中添加构造函数:

  1. LoginPageElements类:

     WebDriver driver; //constructor public LoginPageElements(WebDriver loginDriver) { this.driver=loginDriver; } 
  2. LoginPageActions类:

     WebDriver driver; //constructor public LoginPageActions(WebDriver loginDriver) { this.driver=loginDriver; } 

如果这回答你的问题,请告诉我。