这是啥错误:在 com.google.common.base.Preconditions.checkNotNull

Posted

技术标签:

【中文标题】这是啥错误:在 com.google.common.base.Preconditions.checkNotNull【英文标题】:What is this Error: at com.google.common.base.Preconditions.checkNotNull这是什么错误:在 com.google.common.base.Preconditions.checkNotNull 【发布时间】:2017-08-13 16:01:59 【问题描述】:

我是一名新的自动化测试人员,正在编写示例测试脚本,需要你们的帮助,我尝试使用 POM 和基本的 TestNG。

我创建了 2 个包 - 页面和测试用例。

当我尝试从我的页面包中访问“ClickJoin,Enterusername”方法时遇到一些错误。我曾尝试找出问题所在,但无法了解为什么会发生此错误。

以下是错误: java.lang.NullPointerException 在 com.google.common.base.Preconditions.checkNotNull

“页面”包中的我的代码: 包 com.gptoday.pages;

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

public class Login 

public WebDriver driver;
public WebDriverWait wait;
By join = By.xpath("//*[@id='members']/a[1]");
By username = By.id("username");
By password = By.id("password");
By loginButton = By.xpath("//*[@id='normallogin']/div[4]/p/input[2]");

public Login (WebDriver driver)
    this.driver=driver;

    public void ClickJoin()
        wait = new WebDriverWait(driver,10);
        //driver.findElement(join).click();

wait.until(ExpectedConditions.visibilityOfElementLocated(join)).click();
    

    public void EnterUsername()
        wait = new WebDriverWait(driver, 10);


wait.until(ExpectedConditions.visibilityOfElementLocated(username)).click();
        wait.until(ExpectedConditions.visibilityOfElementLocated(username)).sendKeys("Test username");
        System.out.println("Username Entered");
    

    public void EnterPassword()
        driver.findElement(password).clear();
        driver.findElement(password).click();
        System.out.println("Password Entered");
    

        public void ClickButton()
            wait = new WebDriverWait(driver, 10);
            //driver.findElement(loginButton).click();
 wait.until(ExpectedConditions.visibilityOfElementLocated(loginButton)).click();
            System.out.println("Login Button Clicked");
        
    

“TestCases”包中的我的代码: 这段代码属于我的基类。

package com.gptoday.com.gptoday.testcases;

import org.testng.annotations.Test;
import org.testng.annotations.BeforeMethod;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.firefox.internal.ProfilesIni;
import org.testng.annotations.AfterMethod;
import org.openqa.selenium.firefox.internal.ProfilesIni;

public class Base 
    public WebDriver driver;

    @BeforeMethod
    public void BaseSetup()
        ProfilesIni prof = new ProfilesIni();
        FirefoxProfile ffProfile= prof.getProfile ("vishvesh");
        ffProfile.setAcceptUntrustedCertificates(true);
        ffProfile.setAssumeUntrustedCertificateIssuer(false);

        String BaseUrl = "https://www.gptoday.com";
        System.setProperty("webdriver.gecko.driver", "G:/Workplace/AutomationSetupFiles/Geckdriver/geckodriver.exe"); 
        driver = new FirefoxDriver (ffProfile);
        driver.get(BaseUrl);
        driver.manage().window().maximize();
    

    @AfterMethod
    public void afterTest() 
        System.out.println("Success");
      


**Below the the code for the test case.**
package com.gptoday.com.gptoday.testcases;

import org.testng.annotations.Test;
import com.gptoday.pages.Login;
import org.openqa.selenium.WebDriver;


public class LoginVerification extends Base 

    public WebDriver driver;
    public Login obj = new Login(driver);

    @Test
    public void Verify()
    
        obj.ClickJoin();
        obj.EnterUsername();
    


**Error:**
Success
FAILED: Verify
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 com.gptoday.pages.Login.ClickJoin(Login.java:22)
    at com.gptoday.com.gptoday.testcases.LoginVerification.Verify(LoginVerification.java:16)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:108)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:661)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:869)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1193)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
    at org.testng.TestRunner.privateRun(TestRunner.java:744)
    at org.testng.TestRunner.run(TestRunner.java:602)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:380)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:375)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
    at org.testng.SuiteRunner.run(SuiteRunner.java:289)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1301)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1226)
    at org.testng.TestNG.runSuites(TestNG.java:1144)
    at org.testng.TestNG.run(TestNG.java:1115)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76)

【问题讨论】:

com.google.common.base.Preconditions 包含一组实用程序,允许库作者快速检查 前提条件(即库用户必须遵守的输入/状态不变式)。由于您没有提供堆栈跟踪,我们无法准确告诉您进行了哪些检查。编辑您的帖子以包含完整的堆栈跟踪。 请参考这个解决方案。你的错误肯定会解决。 ***.com/a/62222352/11441405[solution][1] 【参考方案1】:

这是您收到错误的原因:

在 Login 和 EnterUsername 方法中,当您定义等待时,您已经通过了 Webdriver 和间隔的实例。现在,每当 Selenium 检测到这种特殊类型的参数时,Selenium 都会将其视为 FluentWait。现在,当您实际实现 FluentWait 时,您必须导入这两个库“com.google.common.base.Function”,这将解决您面临的错误。当然你也必须导入“FluentWait”。

如果这对你有帮助,请告诉我。

【讨论】:

@VishveshSavant 你能用你为绕过错误和出现的任何新错误所做的代码更改来更新问题吗? 我没有对代码进行任何更改,我只是导入了库。导入 org.openqa.selenium.support.ui.FluentWait;导入 com.google.common.base.Function;但是这些导入并没有在代码中使用。 好吧,我可能错过了另一点。首先添加import com.google.common.base.Preconditions 你是如何使用番石榴罐的?我不确定那里的方法。 实际上这段代码是有效的,但是一旦我将一些重复的代码移到“Base”类中......它开始给我这些错误。也尝试导入“先决条件”,没有任何改变。 我能够通过修改“Login.Java”类中的代码来解决这个问题。这个问题与驱动程序为空有关,因为我没有在“Login”中扩展“Base” “ 班级。谢谢新人【参考方案2】:

通过修改“Login.Java”类中的代码。问题与驱动程序为空有关,因为我没有在“Login”类中扩展“Base”。

【讨论】:

以上是关于这是啥错误:在 com.google.common.base.Preconditions.checkNotNull的主要内容,如果未能解决你的问题,请参考以下文章

Java com.google.common.cache.CacheLoader原因分析

找不到方法“com.google.common.base.Preconditions.checkState”

NoSuchMethodError:com.google.common.collect.ImmutableList.toImmutableList()

google iosched示例项目:com.google.api.client.repackaged.com.google.common.base不存在

NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;J)V

在模块 guava-20.0.jar (com.google.guava:guava:20.0) 中发现重复的类 com.google.common.util.concurrent.Listenabl