首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.lang.NullPointerException---"com.google.common.base.Preconditions.checkNotNull(Preconditions.java:770)“

java.lang.NullPointerException---"com.google.common.base.Preconditions.checkNotNull(Preconditions.java:770)“
EN

Stack Overflow用户
提问于 2017-05-28 02:05:26
回答 1查看 6.3K关注 0票数 3

我对Selenium很陌生,我正在尝试创建一个小框架,在这个框架中登录一个应用程序,然后尝试验证帐户中的一些文本。

但是,一旦我的脚本登录帐户,浏览器就会关闭,我无法验证文本字符串。

有人说这是因为驱动程序是空的,我需要在LoginPage中导入基类。

我也试过了,也遇到了同样的问题。

基类

代码语言:javascript
复制
package testcases;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.PageFactory;


import factory.BrowserFactory;
import factory.DataproviderFactory;
import pages.LoginPage;

public class baseClass {

 WebDriver driver;


    public void setUP()
    {
        driver=BrowserFactory.getBrowser("chrome");
        driver.get(DataproviderFactory.getConfig().getApplicationurl());
    }

    public void loginIntoApplication()
    {

        LoginPage login=PageFactory.initElements(driver, LoginPage.class);
        login.Login(DataproviderFactory.getExcel().getData(0, 0, 0), DataproviderFactory.getExcel().getData(0, 0, 1));

    }


    public void TearDown()
    {
        driver.quit();
    }


}

登录页

代码语言:javascript
复制
package pages;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import testcases.baseClass;


public class LoginPage extends baseClass {

    WebDriver driver;

    public LoginPage(WebDriver ldriver) 
    {
        this.driver=ldriver;
    }


    @FindBy(xpath="//input[@id='log']") WebElement username;
    @FindBy(xpath="//input[@id='pwd']") WebElement password;
    @FindBy(xpath="//input[@id='login']") WebElement LoginButton;

    @FindBy(xpath="//li[@id='wp-admin-bar-my-account']/a") WebElement loginVerification;
    public  String loginText;
    public  String Exp="Howdy, AISHWARY";



    public void Login(String uname,String pwd)
    {
        username.sendKeys(uname);
        password.sendKeys(pwd);
        LoginButton.click();
    }

    public String LoginVerification()
    {
        WebDriverWait wait=new WebDriverWait(driver, 20);
        wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//li[@id='wp-admin-bar-my-account']/a")));
        loginText=loginVerification.getText();
        return loginText;
    }
}

testCaseLoginPage

代码语言:javascript
复制
package testcases;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.Assert;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

import pages.LoginPage;


public class testCaseLoginPage extends baseClass{

    WebDriver driver;

    baseClass base=new baseClass();

    @BeforeTest
    public void initial()
    {
        base.setUP();
    }

    @Test(priority=1)
    public void login()
    {

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

        login.LoginVerification();
        System.out.println(login.loginText);
        Assert.assertEquals(login.loginText, login.Exp,"Unable to verify login verification");

    }

    @AfterTest
    public void close()
    {
        base.TearDown();
    }
}

错误日志

代码语言:javascript
复制
[TestNG] Running:
  C:\Users\Freak\AppData\Local\Temp\testng-eclipse--1783674419\testng-customsuite.xml

Starting ChromeDriver 2.27.440174 (e97a722caafc2d3a8b807ee115bfb307f7d2cfd9) on port 10357
Only local connections are allowed.
May 28, 2017 7:08:42 AM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
FAILED: login
java.lang.NullPointerException
    at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:770)
    at org.openqa.selenium.support.ui.FluentWait.<init>(FluentWait.java:96)
    at org.openqa.selenium.support.ui.WebDriverWait.<init>(WebDriverWait.java:71)
    at org.openqa.selenium.support.ui.WebDriverWait.<init>(WebDriverWait.java:45)
    at pages.LoginPage.LoginVerification(LoginPage.java:42)
    at testcases.testCaseLoginPage.login(testCaseLoginPage.java:36)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
    at org.testng.TestRunner.privateRun(TestRunner.java:767)
    at org.testng.TestRunner.run(TestRunner.java:617)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
    at org.testng.SuiteRunner.run(SuiteRunner.java:240)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1198)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1123)
    at org.testng.TestNG.run(TestNG.java:1031)
EN

回答 1

Stack Overflow用户

发布于 2020-06-05 18:53:42

我在appium中发现了与下面相同的错误

代码语言:javascript
复制
java.lang.NullPointerException
    at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:882)
    at io.appium.java_client.TouchAction.<init>(TouchAction.java:52)

原因-:因为我在子类和父类中初始化了驱动程序,如下所示。

儿童班

代码语言:javascript
复制
public class AirAsia extends Base {
@SuppressWarnings("rawtypes")
  private AndroidDriver driver;

/*
 * Sign up Page Elements
 */

@AndroidFindBy(xpath = "//*[@text='Flights']")
private MobileElement flights;}

基类

代码语言:javascript
复制
    public class Base {

@SuppressWarnings("rawtypes")
public AppiumDriver driver;

/*
 * General App Elements
 */

@AndroidFindBy(xpath = "//androidx.appcompat.app.ActionBar.Tab[@content-desc=\"Home\"]/android.widget.TextView")
public MobileElement home;}

解决办法

现在,您可以从子类中删除驱动程序初始化,如下所示

代码语言:javascript
复制
    public class AirAsia extends Base {
@SuppressWarnings("rawtypes")
  private AndroidDriver driver;

/*
 * Sign up Page Elements
 */

@AndroidFindBy(xpath = "//*[@text='Flights']")
private MobileElement flights;}

希望它能帮助所有人使用Java或任何语言解决Selenium和Appium中的此类错误。如果您正在扩展父类,如果您在基类或父类中初始化了驱动程序,则不必初始化驱动程序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44223175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档