Kakashi - Sensei
Kakashi - Sensei

Reputation: 381

java.lang.NullPointerException while invoking driver.quit() within @AfterClass annotated method through Selenium WebDriver and JUnit

I created a test using JUnit and in class @AfterClass I put the driver.quit () command to shut down the browser when the tests are finished but the eclipse displays the java.lang.NullPointerException message.

The test class populates several fields and then makes a query in the base, displays the result in the Eclipse console and should close the browser but displays the java.lang.NullPointerException message.

Below is the log and test script.

Eclipse Console

public class validarStatus {

private static WebDriver driver;

@Before
public void setUp() throws Exception {

    System.setProperty("webdriver.chrome.driver", "E:\\Selenium\\chromedriver.exe");

}

@Test
public void validarStatusOs() throws InterruptedException {

    WebDriver driver = new ChromeDriver();
    driver.get("http://10.5.9.45/BKOMais_S86825EstrategiaBackOfficeClaroFixo");
    driver.manage().window().maximize();

    // Logar BkoMais
    driver.findElement(By.id("matricula_I")).sendKeys("844502");
    driver.findElement(By.id("senha_I")).sendKeys("Pw34Jdt#*");
    driver.findElement(By.id("bt_entrar")).click();

    // Logar na Estratégia
    driver.findElement(By.id("mn_backoffice")).click();
    driver.findElement(By.id("mn_bkoffice_prod_203")).click();// Produto
    driver.findElement(By.id("mn_bkoffice_est_57")).click();// Estratégia

    // Selecionado a atividade
    Select atividade = new Select(driver.findElement(By.id("cboAtividade")));
    atividade.selectByIndex(3);

    // Registro >> Novo
    Thread.sleep(500);
    driver.findElement(By.id("mn_registro")).click();
    driver.findElement(By.id("mn_novo_caso")).click();

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

    // Cod Os Estratégia VREL
    String CodOs = driver.findElement(By.xpath("//*[@id=\"content\"]/div[1]/fieldset[1]/div[2]/div[3]/span"))
            .getText();

    // Campo Análise de Contrato
    Select analiseContrato = new Select(driver.findElement(By.id("cboMotivo")));
    analiseContrato.selectByIndex(5);

    try {
        // Campo Ação
        Select acao = new Select(driver.findElement(By.id("cboSubMotivo")));
        acao.selectByIndex(3);

        // Status
        WebDriverWait wait = new WebDriverWait(driver, 10);
        WebElement ele = wait.until(ExpectedConditions.presenceOfElementLocated(By.id("cboStatus")));
        String valorStatus = ele.getText();
        // driver.findElement(By.id("cboStatus")).getText();
        Assert.assertEquals(" R", valorStatus);

        // Chamado
        driver.findElement(By.id("txtChamado")).sendKeys("Teste");

        // Observação
        driver.findElement(By.id("txtObservacao")).sendKeys("Teste 07/06/2018");

        // Botão Salvar
        driver.findElement(By.id("btnSalvar")).click();

    } catch (StaleElementReferenceException e) {

        // Campo Ação
        Select acao = new Select(driver.findElement(By.id("cboSubMotivo")));
        acao.selectByIndex(3);

        // Status
        WebDriverWait wait = new WebDriverWait(driver, 10);
        WebElement ele = wait.until(ExpectedConditions.presenceOfElementLocated(By.id("cboStatus")));
        String valorStatus = ele.getText();

        // String valorStatus = driver.findElement(By.id("cboStatus")).getText();
        Assert.assertEquals(" R", valorStatus);
        // Chamado
        driver.findElement(By.id("txtChamado")).sendKeys("Teste");

        // Observação
        driver.findElement(By.id("txtObservacao")).sendKeys("Teste 07/06/2018");

        // Botão Salvar
        driver.findElement(By.id("btnSalvar")).click();

    } catch (Exception e) {

        // Campo Ação
        Select acao = new Select(driver.findElement(By.id("cboSubMotivo")));
        acao.selectByIndex(3);

        // Status
        String valorStatus = driver.findElement(By.id("cboStatus")).getText();
        Assert.assertEquals(" R", valorStatus);

        // Chamado
        driver.findElement(By.id("txtChamado")).sendKeys("Teste");

        // Observação
        driver.findElement(By.id("txtObservacao")).sendKeys("Teste 07/06/2018");

        // Botão Salvar
        driver.findElement(By.id("btnSalvar")).click();

    }

    // Select na base para validar o status da NU_OS
    ValidarEstrategiaPage p = new ValidarEstrategiaPage();
    p.returnNuOs(CodOs);

    // Saindo do Bko+
    Thread.sleep(1000);
    driver.findElement(By.linkText("Sair")).click();

}

@AfterClass
public static void closeBrowser() {

    driver.quit();

}}

Upvotes: 0

Views: 2336

Answers (2)

undetected Selenium
undetected Selenium

Reputation: 193298

As per your code block you have defined a global instance of WebDriver as:

private static WebDriver driver;

Within validarStatusOs() method you have initialized another local instance of WebDriver as:

WebDriver driver = new ChromeDriver();

When the control of your program comes out of validarStatusOs() method, the local instance of WebDriver is no more accessible.

So, when the control of your program enters within closeBrowser() method it tries to use the global instance of WebDriver and throws java.lang.NullPointerException.

Solution

As you have declared a global instance of WebDriver, use the same instance throughout your program. So you need to change the line:

WebDriver driver = new ChromeDriver();

To:

driver = new ChromeDriver();

Upvotes: 1

AutomatedOwl
AutomatedOwl

Reputation: 1089

You clearly defined your WebDriver object as local variable inside the method:

@Test
public void validarStatusOs() throws InterruptedException {
  WebDriver driver = new ChromeDriver();

In order for both the 'After' and 'Test' methods to interact with the global variable, change to:

@Test
public void validarStatusOs() throws InterruptedException {
  driver = new ChromeDriver();

And BTW, change your class name from 'validarStatus' to 'ValidarStatus'. Starting a class name in upper case letter is a major best practice in Java.

Upvotes: 2

Related Questions