Исключение NullPointer при выполнении теста в TestNG и Selenium - PullRequest
0 голосов
/ 07 марта 2019

У меня есть 4 метода, которые вызывают мой браузер, входят на страницу и выполняют некоторые действия. Когда я запускаю код как приложение Java, открывается браузер и выполняются действия, но когда я запускаю тест TestNG, консоль показывает все 4 пройденных теста, но также показывает Null Pointer Exception. Кроме того, при выполнении теста testng он не вызывает мой браузер и не выполняет действия.

Код:

package pulse.tpr;

import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.Assert;
import org.testng.annotations.*;

public class LoginInterface {

    public WebDriver driver;
    public Actions actions;

    public void launchApplication() {

        System.setProperty("webdriver.chrome.driver",
                "C:\\MyChromeDriver\\chromedriver_win32\\chromedriver.exe");
        driver = new ChromeDriver();
        driver.get("myURL");
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
        actions = new Actions(driver);
    }

    public void closeApplication() {
        driver.close();
    }

    @Test(priority = 0)
    public void adminLogin() {

        try {
            actions.moveToElement(driver.findElement(By.name("userId")));
            actions.click();
            actions.sendKeys("sysadmin");
            actions.build().perform();

            actions.pause(java.time.Duration.ofSeconds(1));

            actions.moveToElement(driver.findElement(By.name("password")));
            actions.click();
            actions.sendKeys("MMNext13#");
            actions.build().perform();

            actions.pause(java.time.Duration.ofSeconds(1));
                      actions.moveToElement(driver.findElement(By.name("dcNumber")));
            actions.click();
            actions.sendKeys("7036");
            actions.build().perform();

        } catch (Exception e) {

            e.printStackTrace();
        }
    }

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

        try {
            actions.moveToElement(driver.findElement(By
                    .cssSelector("body > ion-app > ng-component > ion-nav > page-login > ion-content > div.scroll-content > ion-card > ion-grid > form > ion-list > div.login-button > button > span")));
            actions.click();
            actions.build().perform();

            actions.moveToElement(driver.findElement(By.id("tab-t0-2")));
            actions.click();
            actions.build().perform();

            driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        } catch (Exception e) {

            e.printStackTrace();
        }
    }

    @Test(priority = 2)
    public void createMove() {
        try {
            actions.moveToElement(driver.findElement(By
                    .className("send-associates-button")));
            actions.click();
            actions.build().perform();

            driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

            actions.moveToElement(driver.findElement(By
                    .cssSelector("#tabpanel-t0-2 > send-associate-page > ion-content > div.scroll-content > div > ion-list > ion-item:nth-child(4)")));
            actions.click();
            actions.build().perform();

            actions.moveToElement(driver.findElement(By
                    .xpath("//*[@id='footers']/ion-toolbar/div[2]/ion-row/ion-col[2]/button")));
            actions.click();
            actions.build().perform();

            actions.moveToElement(driver.findElement(By
                    .xpath("//*[@id='tabpanel-t0-2']/tpr-send-associates-page/ion-content/div[2]/div/div/ion-col[2]")));
            actions.click();
            actions.build().perform();

            actions.moveToElement(driver.findElement(By
                    .xpath("//*[@id='tabpanel-t0-2']/tpr-send-associates-page/ion-content/div[2]/div/div/ion-col[2]/ion-row[2]")));
            actions.click();
            actions.build().perform();

            driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

            // Select to area
            actions.moveToElement(driver.findElement(By
                    .xpath("//*[@id='tabpanel-t0-2']/tpr-send-associates-page/ion-content/div[2]/div/div/ion-col[2]")));
            actions.click();
            actions.build().perform();

            // Select to area
            actions.moveToElement(driver.findElement(By
                    .xpath("//*[@id='tabpanel-t0-2']/tpr-send-associates-page/ion-content/div[2]/div/div/ion-col[2]/ion-row[2]")));
            actions.click();
            actions.build().perform();

            // Next button in to area page
            actions.moveToElement(driver.findElement(By
                    .xpath("//*[@id='tabpanel-t0-2']/tpr-send-associates-page/ion-footer/button")));
            actions.click();
            actions.build().perform();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test(priority = 3)
    public void rightNowToClockout() {
        try {
            // Right Now Time

            actions.moveToElement(driver.findElement(By
                    .xpath("//*[@id='tabpanel-t0-2']/tpr-send-associates-page/ion-content/div[2]/div/div/ion-row[4]")));
            actions.click();
            actions.build().perform();

            // Next Button
            actions.moveToElement(driver.findElement(By
                    .xpath("//*[@id='tabpanel-t0-2']/tpr-send-associates-page/ion-footer/button")));
            actions.click();
            actions.build().perform();

            // Clockout time
            actions.moveToElement(driver.findElement(By
                    .xpath("//*[@id='tabpanel-t0-2']/tpr-send-associates-page/ion-content/div[2]/div/div/ion-row[2]/ion-col")));
            actions.click();
            actions.build().perform();

            // Next button
            actions.moveToElement(driver.findElement(By
                    .xpath("//*[@id='tabpanel-t0-2']/tpr-send-associates-page/ion-footer/button")));
            actions.click();
            actions.build().perform();

            // Send Button
            actions.moveToElement(driver.findElement(By
                    .xpath("//*[@id='tabpanel-t0-2']/tpr-send-associates-page/ion-footer/ion-row/ion-row")));
            actions.click();
            actions.build().perform();

            WebDriverWait wait = new WebDriverWait(driver, 60);
            wait.until(ExpectedConditions.visibilityOfElementLocated(By
                    .xpath("//*[@id='tabpanel-t0-2']/tpr-summary-page/ion-content/div[2]/div/div[2]/div/ion-card/ion-row[1]/ion-col/ion-row[2]")));
            String element = driver
                    .findElement(
                            By.xpath("//*[@id='tabpanel-t0-2']/tpr-summary-page/ion-content/div[2]/div/div[2]/div[1]/ion-card/ion-row[1]/ion-col/ion-row[2]/div[1]/label[1]"))
                    .getText();
            Assert.assertTrue(element.contains("1:35"));
        } catch (Exception e) {

            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        LoginInterface obj = new LoginInterface();
        obj.launchApplication();
        obj.adminLogin();
        obj.tprPage();
        obj.createMove();
        obj.rightNowToClockout();
    }
}

А ниже - ошибка testNG:

java.lang.NullPointerException
    at pulse.tpr.LoginInterface.adminLogin(LoginInterface.java:38)
    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:124)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:583)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:719)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:989)
    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)
java.lang.NullPointerException
    at pulse.tpr.LoginInterface.tprPage(LoginInterface.java:67)
    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:124)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:583)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:719)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:989)
    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)

1 Ответ

2 голосов
/ 07 марта 2019

Вместо запуска сценария в методе main, вы должны запустить сценарий как «TestNG Test» и выполнить первоначальную настройку перед запуском тестов, которые вы можете использовать, BeforeSuite и AfterSuite.

Итак, вам нужно внести два изменения в ваш скрипт:

  1. Вставьте тег @BeforeSuite перед методом launchApplication() и вставьте тег @AfterSuite перед методом closeApplication(), который будет выполнять настройку и закрытие драйвера до и после выполнения сценария.

  2. Удалите весь основной метод, который вы написали, и затем запустите сценарий как «TestNG Test», ваши тесты должны работать как положено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...