首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >执行Selenium脚本时出错- java.lang.NullPointerException - TestNG

执行Selenium脚本时出错- java.lang.NullPointerException - TestNG
EN

Stack Overflow用户
提问于 2018-07-30 02:03:59
回答 1查看 139关注 0票数 1

我正在尝试通过testNG运行脚本。但是让java.lang.NullPointerException. .。我已经在BeforeMethod中输入了驱动程序初始化代码,其余代码正在测试中。请让我知道我的脚本出了什么问题,因为我提前得到了error.Thanks。

我的脚本:

public class NewTest {

    WebDriver driver = null;
    @BeforeMethod
    public void beforeMethod() {
        System.setProperty("webdriver.chrome.driver", Constants.Chrome_Driver);
        WebDriver driver = new ChromeDriver();
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        driver.get("http://" + Constants.auth_Username + ":" + Constants.auth_Password + "@" + Constants.URL);
    }

    @Test
    public void f() throws InterruptedException {
        actions.Admin_Login.txbx_aUsername(driver).sendKeys(Constants.aUsername);
        actions.Admin_Login.txbx_aPassword(driver).sendKeys(Constants.aPassword);
        actions.Admin_Login.btn_login(driver).click();
        actions.create(driver).click();
        Actions action = new Actions(driver);
        action.moveToElement(actions.create.list(driver)).build().perform();


        actions.create_list.list_category(driver).click();
        actions.create_list.list_ceate_category(driver).click();
        actions.create_list.txtbx_Cat_tile(driver).sendKeys(Constants.list_title);
        actions.create_list.btn_Cat_Save(driver).click();
        System.out.println("List Created Successfully");
    }
}

我正在使用PageObjects获取数据。这个脚本在没有testNG的情况下运行得很好。但是当我将测试转换成testNG并执行时,它抛出了错误。

我面临的错误:

java.lang.NullPointerException
    at actions.Admin_Login.txbx_aUsername(Admin_Login.java:13)
    at testScripts.NewTest.f(NewTest.java:43)
    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:124)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:580)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:716)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:988)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
    at org.testng.TestRunner.privateRun(TestRunner.java:648)
    at org.testng.TestRunner.run(TestRunner.java:505)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
    at org.testng.SuiteRunner.run(SuiteRunner.java:364)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)
    at org.testng.TestNG.runSuites(TestNG.java:1049)
    at org.testng.TestNG.run(TestNG.java:1017)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:114)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)

常量类:

public class Constants {

    public static final String URL_Shika = "url";

    public static final String list_Title = "Test";

    public static final String aUsername = "Test";

    public static final String aPassword = "abcd123";

    public static final String uUsername = "Test01";

    public static final String uPassword = "abcd123";

    public static final String vUsername = "test321";

    public static final String vPassword = "abcd123";

    public static final String auth_Username = "admin";

    public static final String auth_Password = "admin@123";

    public static final String FF_Driver = "/path/geckodriver";

    public static final String Chrome_Driver = "/path/chromedriver";

}

操作类:

public class Admin_Login {

        private static WebElement element = null;

        public static WebElement txbx_aUsername (WebDriver driver) {

            element = driver.findElement(By.id("username"));

            return element;
        }

public static WebElement txbx_aPassword (WebDriver driver) {

            element = driver.findElement(By.id("password"));

            return element;
        }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-30 08:38:00

您在@BeforeMethod中初始化的驱动程序对象在您的测试方法中不可见。尝试以下操作:

public class NewTest {

    WebDriver driver = null;
    @BeforeMethod
    public void beforeMethod() {
        System.setProperty("webdriver.chrome.driver", Constants.Chrome_Driver);
        //Pay close attention this below line. Notice how we are not creating a new WebDriver variable
        //but we are just initialising the class level data member here
        driver = new ChromeDriver();
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        driver.get("http://" + Constants.auth_Username + ":" + Constants.auth_Password + "@" + Constants.URL);
    }

    @Test
    public void f() throws InterruptedException {
        Admin_Login.txbx_aUsername(driver).sendKeys(Constants.aUsername);
        Admin_Login.txbx_aPassword(driver).sendKeys(Constants.aPassword);
        Admin_Login.btn_login(driver).click();
        actions.create(driver).click();
        Actions action = new Actions(driver);
        action.moveToElement(actions.create.list(driver)).build().perform();

        //Create a Course Category
        actions.create_list.list_category(driver).click();
        actions.create_list.list_ceate_category(driver).click();
        actions.create_list.txtbx_Cat_tile(driver).sendKeys(Constants.list_title);
        actions.create_list.btn_Cat_Save(driver).click();
        System.out.println("List Created Successfully");
    }
}

请尝试等待文本框出现,然后使用以下代码输入任何数据:

public static WebElement txbx_aUsername (WebDriver driver) {
    WebDriverWait w = new WebDriverWait(driver, 30);
    w.until(ExpectedConditions.visibilityOfElementLocated(By.id("username")));
    return driver.findElement(By.id("username"));
}

如果你仍然面临任何问题,请告诉我。

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

https://stackoverflow.com/questions/51583124

复制
相关文章

相似问题

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