java.lang.NullPointerException при вызове driver.quit () в аннотированном методе @AfterClass через Selenium WebDriver и JUnit - PullRequest
0 голосов
/ 08 июня 2018

Я создал тест, используя JUnit, и в классе @AfterClass я добавил команду driver.quit (), чтобы закрыть браузер после завершения тестов, но в eclipse отобразится сообщение java.lang.NullPointerException.

Тестовый класс заполняет несколько полей, а затем делает запрос в базе, отображает результат в консоли Eclipse и должен закрыть браузер, но отображает сообщение java.lang.NullPointerException.

Ниже приведен журнал и тестскрипт.

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();

}}

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

В соответствии с вашим блоком кода вы определили глобальный экземпляр из WebDriver как:

private static WebDriver driver;

В рамках validarStatusOs() метода вы инициализировали еще один локальный экземпляр из WebDriver как:

WebDriver driver = new ChromeDriver();

Когда управление вашей программой происходит из метода validarStatusOs(), локальный экземпляр из WebDriver больше недоступен.

Итак, когда элемент управления вашей программы входит в метод closeBrowser(), он пытается использовать глобальный экземпляр из WebDriver и выбрасывает java.lang.NullPointerException.

Решение

Поскольку вы объявили глобальный экземпляр из WebDriver , используйте один и тот же экземпляр во всей вашей программе.Поэтому вам нужно изменить строку:

WebDriver driver = new ChromeDriver();

Кому:

driver = new ChromeDriver();
0 голосов
/ 08 июня 2018

Вы четко определили свой объект WebDriver как локальную переменную внутри метода:

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

Чтобы методы «После» и «Тест» взаимодействовали с глобальной переменной, измените на:

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

И, кстати, измените имя вашего класса с «validarStatus» на «ValidarStatus».Начинать имя класса с заглавной буквы - это лучшая практика в Java.

...