я получаю Null.pointer.exception при попытке идентифицировать элемент в текущем классе, используя экземпляр драйвера из другого класса - PullRequest
1 голос
/ 12 июля 2019

В нижеуказанном классе LogOutfunc, Я создал объект для класса LoginPage, и когда я запускаю программу класса LogOutfunc, метод Launch () передается. Тем не менее Метод LogOut () завершается с ошибкой java.lang.NullPointerException.

После login (), URL переходит на страницу, которая содержит объекты, присутствующие в методе LogOut (), но не идентифицирует объект. Предложите мне решение о том, как использовать экземпляр драйвера в текущем классе.

1. LogOutfunc Class

package TestNG;

import org.openqa.selenium.By;
import org.openqa.selenium.NoAlertPresentException;
import org.openqa.selenium.WebDriver;
import org.testng.annotations.Test;

public class LogOutfunc {

    public WebDriver driver;

    @Test()
    public void Launch() throws NoAlertPresentException, InterruptedException {
        LoginPage tc1 = new LoginPage();
        tc1.setUp();
        tc1.Login("test_Sharmila","Welcome123","Sharmila");
    }

    @Test()
        public void LogOut() {
        System.out.println("Logout Functionality");
        driver.findElement(By.xpath("//img[@id=\"usrmenu\"]]")).click();
        driver.findElement(By.xpath("//span[@class='logoutx']//a[text()='Logout']")).click();
        System.out.println("Logged out from the page");

2. Класс LoginPage

package TestNG;
import java.util.concurrent.TimeUnit;

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

public class LoginPage {

    String driverPath = "C:\\Selenium\\Driver\\chromedriver.exe";
    public WebDriver driver;
    String baseUrl = "https://www.myguruavatar.com/demo";
    String expectedtUrl = "https://www.myguruavatar.com/demo/index.php?option=com_avatarprofile&view=avatarprofileform";

    @BeforeTest
    public void setUp() {
        System.setProperty("webdriver.chrome.driver", driverPath);
        driver = new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get(baseUrl);
    }

    @Test
    public void Login(String userName, String password, String Name)
            throws NoAlertPresentException, InterruptedException {
        driver.manage().window().maximize();
        driver.findElement(By.xpath("//input[@id=\"modlgn-username\"]")).sendKeys(userName);
        driver.findElement(By.xpath("//input[@id=\"modlgn-passwd\"]")).sendKeys(password);
        driver.findElement(By.xpath("//*[@id=\"login-form\"]/fieldset/div/p[2]/input")).click();
        driver.findElement(By.xpath("//input[@id=\"hmelogin\"]")).click();

        if (driver.getCurrentUrl().contains(expectedtUrl)) {
            System.out.println("Login Success");



        } else {
            System.out.println("Login Failure");

пожалуйста, дайте мне знать, как использовать экземпляр драйвера в текущем классе.

1 Ответ

1 голос
/ 14 июля 2019

Это потому, что драйвер нулевой.См. Здесь

public class LogOutfunc {

public WebDriver driver;

Вы водитель в этом классе.Метод запуска будет работать, поскольку в этом классе есть действительный драйвер.

Так что вам нужно изменить способ реализации.

простой способ - LogOutfunc расширяет LoginPage и удаляет эту строку общедоступным драйвером WebDriver;в классе LogoutFun.

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