Как инициализировать драйвер, чтобы избежать ошибки NullPointerException - PullRequest
0 голосов
/ 02 мая 2018

У меня проблема с этим классом, когда я получаю исключение нулевого указателя. Я вставил System.out.println("driver=" + driver);, чтобы увидеть, что выводится, и в нем указывается driver=null для каждого набора данных, что заставляет меня думать, что есть проблема с инициализацией, когда я нажимаю на метод в @Test. Как я могу разрешить эту инициализацию драйвера, чтобы мои тесты проходили в testNG?

Ниже приведен код:

package com.testng.practice;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

    public class LoginTest {

        WebDriver driver = null;

        @BeforeTest
        public void invokeApplication() {
            System.setProperty("webdriver.chrome.driver", "xxx\\chromedriver.exe");
            WebDriver driver = new ChromeDriver(); 
            driver.manage().window().maximize();
            driver.get("https://www.facebook.com");
        }   

        @Test (dataProvider = "getData")
        public void loginFaceBook(String email, String password) {

            System.out.println("driver=" + driver); 

            WebElement emailField = driver.findElement(By.name("email"));
            WebElement passwordField = driver.findElement(By.name("pass"));

            emailField.sendKeys(email);
            passwordField.sendKeys(password);

            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        @DataProvider
        public Object[][] getData(){

            //declared object of 4 rows and 2 columns

            Object[][] dataSet = new Object[4][2];

            dataSet[0][0] = "TimSmith@gmail.com";
            dataSet[0][1] = "Smith123";

            dataSet[1][0] = "JaneMcCormack@gmail.com";
            dataSet[1][1] = "McCormack123";

            dataSet[2][0] = "AnjaliPrakash@gmail.com";
            dataSet[2][1] = "Prakash123";

            dataSet[3][0] = "JamesBean@gmail.com";
            dataSet[3][1] = "Bean123";

            return dataSet;

        }
    }

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

Я думаю, что проблема должна быть в аннотации @BeforeTest, если вы запускаете сам класс, работая как TestNG. Аннотация BeforeTest работает перед тегом в файле XML Runner. Вот определение BeforeTest из документации TestNG. @BeforeTest: аннотированный метод будет запущен до запуска любого тестового метода, принадлежащего классам внутри тега. Если вы хотите запустить до @Test, вам нужно использовать @ BeforeMethod.

Обратите внимание на различия между всеми аннотациями. Вы можете найти отличия здесь .

0 голосов
/ 02 мая 2018

вы объявляете драйвер WebDriver = null; В мировом масштабе. Тогда нет необходимости объявлять один раз в методе invokeApplication (); только запись
Драйвер WebDriver = null;

    @BeforeTest
    public void invokeApplication() {
        System.setProperty("webdriver.chrome.driver", "xxx\\chromedriver.exe");
         driver = new ChromeDriver(); 
        driver.manage().window().maximize();
        driver.get("https://www.facebook.com");
0 голосов
/ 02 мая 2018

Это определение переменной driver допустимо в методе invokeApplication() и оставляет атрибут класса driver неинициализированным

WebDriver driver = new ChromeDriver();

для инициализации атрибута класса используйте:

this.driver = new ChromeDriver();

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