首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在selenium-java中调试NullPointerException

如何在selenium-java中调试NullPointerException
EN

Stack Exchange QA用户
提问于 2020-03-22 05:16:37
回答 1查看 1.2K关注 0票数 0

控制台

代码语言:javascript
复制
FAILED CONFIGURATION: @BeforeMethod setUp
java.lang.NullPointerException
    at com.ecinteractive.base.TestBase.initialization(TestBase.java:50)
    at com.ecinteractive.testcases.LoginPageTest.setUp(LoginPageTest.java:32)
    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.invokeConfigurationMethod(Invoker.java:564)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:213)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:653)
    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)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)

SKIPPED CONFIGURATION: @AfterMethod tearDown
SKIPPED CONFIGURATION: @BeforeMethod setUp
SKIPPED CONFIGURATION: @AfterMethod tearDown
SKIPPED CONFIGURATION: @BeforeMethod setUp
SKIPPED CONFIGURATION: @AfterMethod tearDown
SKIPPED: loginPageTitleTest
SKIPPED: logoImageTest
SKIPPED: loginTest

===============================================
    Default test
    Tests run: 3, Failures: 0, Skips: 3
    Configuration Failures: 1, Skips: 5
===============================================


===============================================
Default suite
Total tests run: 3, Failures: 0, Skips: 3
Configuration Failures: 1, Skips: 5
===============================================

[TestNG] Time taken by org.testng.reporters.EmailableReporter@2d127a61: 0 ms
[TestNG] Time taken by org.testng.reporters.XMLReporter@290dbf45: 16 ms
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 15 ms
[TestNG] Time taken by org.testng.reporters.JUnitReportReporter@4e41089d: 0 ms
[TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@7181ae3f: 32 ms
[TestNG] Time taken by org.testng.reporters.jq.Main@4e4aea35: 31 ms

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

<#>LoginPageTest类

代码语言:javascript
复制
package com.ecinteractive.testcases;

import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

import com.ecinteractive.base.TestBase;
import com.ecinteractive.pages.HomePage;
import com.ecinteractive.pages.LoginPage;

public class LoginPageTest extends TestBase {
    LoginPage loginPage;
    HomePage homePage;



    public LoginPageTest() {
        super();


    }

    @BeforeMethod

    public void setUp() {
        initialization();
        this.loginPage = new LoginPage();


    }

@Test (priority=1)
public void loginPageTitleTest() {
    String title = loginPage.validateLoginPageTitle();
    Assert.assertEquals(title, "Login | ECi - QA Site 1");

}
@Test(priority=2)
public void logoImageTest() {
    boolean flag =loginPage.validateLogo() ;
    Assert.assertTrue(flag);

}

@Test(priority=3)
public void loginTest() {
    homePage= loginPage.login(prop.getProperty("username"), prop.getProperty("password"));

}






@AfterMethod

public void tearDown() {
    driver.quit();

}
}
+++++++++++++++++++++++++++++++++++++++++++++++++++

Test基类

代码语言:javascript
复制
package com.ecinteractive.base;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

import com.ecinteractive.util.TestUtil;

public class TestBase {

    public static WebDriver driver;
    public static Properties prop;

    public TestBase() {

        try {

            prop = new Properties();
            FileInputStream ip = new FileInputStream(
                    System.getProperty("user.dir") + "/src/main/java/com/ecinteractive" + "/config/config.properties");
            prop.load(ip);

        } catch (FileNotFoundException e) {
            e.printStackTrace();

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public static void initialization() {
        String browserName = prop.getProperty("browser");

        if (browserName.equals("chrome")) {
            System.setProperty("webdriver.chrome.driver", "/Drivers/chromedriver.exe");
            driver = new ChromeDriver();

        } else if (browserName.equals("FF")) {
            System.setProperty("webdriver.gecko.driver", "/Drivers/geckodriver.exe");
            driver = new FirefoxDriver();

        }
        driver.manage().window().maximize();
        driver.manage().deleteAllCookies();
        driver.manage().timeouts().pageLoadTimeout(TestUtil.PAGE_LOAD_TIMEOUT, TimeUnit.SECONDS);
        driver.manage().timeouts().implicitlyWait(TestUtil.PAGE_LOAD_TIMEOUT, TimeUnit.SECONDS);

        driver.get(prop.getProperty("url"));

}
}
++++++++++++++++++++++++++++

属性

url =

用户名=密码=

browser =铬

LoginPage.java

代码语言:javascript
复制
package com.ecinteractive.pages;

import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;

import com.ecinteractive.base.TestBase;

public class LoginPage extends TestBase {

    //Page Factory -OR

    @FindBy(id="UserName")
    WebElement UserName;


    @FindBy(id="Request_Password")
    WebElement Request_Password;

    @FindBy(xpath="//span[contains(text(),'Login')]")
    WebElement loginBtn;

    @FindBy(xpath="//div[@class='logo']")
    WebElement logo;


    //Now we need to initialize all the OR so we create a Constructor
    // this is current class 

    public LoginPage() {
        PageFactory.initElements(driver, this);

    }

    //Actions
    public String validateLoginPageTitle () {
        return driver.getTitle();

    }
    public boolean validateLogo() {
        return logo.isDisplayed();      
    }
    public HomePage login(String un, String pwd) {
        UserName.sendKeys(un);
        Request_Password.sendKeys(pwd);
        loginBtn.click();


        return new HomePage();

    }
}
EN

回答 1

Stack Exchange QA用户

回答已采纳

发布于 2020-03-22 17:58:57

所显示的例外是:

代码语言:javascript
复制
FAILED CONFIGURATION: @BeforeMethod setUp
java.lang.NullPointerException
    at com.ecinteractive.base.TestBase.initialization(TestBase.java:50)

因此,在(TestBase.java:50)中,可以说异常是在TestBase类line 50处抛出的。

在分析TestBase的第50行时,我们可以看到抛出错误的代码如下:

代码语言:javascript
复制
driver.manage().window().maximize();

这表明驱动程序对象未正确初始化,

<#>so试图打印browserName并查看您是否实际获得了所需的值,因为代码似乎没有输入任何if语句。

我硬编码了值browsername="chrome“,一切都很好。所以看起来prop.getproperty(“浏览器”)没有给出铬,试着在if语句之前打印它。确保没有空格或字符

并查看是否有任何尾随或前导空格fpr browserName值。在比较之前删除它,或者使用browserName.contains("chrome")代替browserName.equals("chrome")

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

https://sqa.stackexchange.com/questions/43041

复制
相关文章

相似问题

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