Получение исключения нулевого указателя при попытке запуска двух классов для двух страниц (страница входа и домашняя страница)
При запуске одного класса он работает нормально, но когда я запускаю два класса (логин и Домашняя страница), он выбрасывает исключение нулевого указателя, кажется, что что-то пошло не так для второго класса, пожалуйста, помогите мне решить эту проблему, заранее спасибо.
package Utilities; import java.util.concurrent.TimeUnit; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class Browserfctry { public static WebDriver startApplication(WebDriver dr, String browsername, String url) { if (browsername.equals("chrome")) { System.setProperty("webdriver.chrome.driver", "/home/ibrahim/eclipse-workspace/chromedriver"); dr = new ChromeDriver(); } else if (browsername.equals("firefox")) { System.setProperty("webdriver.gecko.driver", "/home/ibrahim/eclipse-workspace/geckodriver"); dr = new FirefoxDriver(); } else { System.out.println("we do not support this browser"); } dr.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS); dr.manage().window().maximize(); dr.get(url); dr.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); return dr; } // public static void quitbrowser(WebDriver dr) // { // dr.quit(); // }
Что я уже пробовал:
Мой базовый класс:
package Pages; import org.openqa.selenium.WebDriver; import org.testng.annotations.BeforeSuite; import Utilities.Browserfctry; public class BaseClass { public WebDriver dr; @BeforeSuite public void start() { dr = Browserfctry.startApplication(dr, "chrome", "http://192.168.11.92:3003"); } //@AfterClass // public void terminate() // { // Browserfctry.quitbrowser(dr); // // } }
Моя домашняя страница класс
package Pages; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; public class HomePageTR { WebDriver driver; public HomePageTR(WebDriver dr) { this.driver = dr; } @FindBy(xpath = "//span[@class='glyphicon glyphicon-th']") WebElement Homemenuicon; @FindBy(xpath = "//span[@class='glyphicon glyphicon-user']") WebElement Profileicon; @FindBy(xpath = "//span[@class='glyphicon glyphicon-cog']") WebElement Settingsicon; @FindBy(xpath = "//span[@class='glyphicon glyphicon-off']") WebElement Logouticon; @FindBy(xpath = "//span[@class='glyphicon glyphicon-menu-left']") WebElement Sidemenucollider; @FindBy(xpath = "//li[@data-section='dataset']") WebElement SDMDataAccessicon; @FindBy(xpath = "//li[@data-section='metadataWizard']") WebElement SDMMetadataicon; @FindBy(xpath = "//li[@data-section='analysisWizard']") WebElement SDMMotifexplorericon; @FindBy(xpath = "(//img)[@src='/images/home/library.png'][1]") WebElement SDMMotiflibrary; @FindBy(xpath = "//li[@data-section='dashboardSelect']") WebElement SDMDashboards; @FindBy(xpath = "//a[@data-section='dataset']") WebElement Dataaccessicon; @FindBy(xpath = "//a[@data-section='metadataWizard']") WebElement Metadataicon; @FindBy(xpath = "//a[@data-section='analysisWizard']") WebElement Motifexplorericon; @FindBy(xpath = "//a[@data-section='browser']") WebElement Motiflibraryicon; @FindBy(xpath = "//a[@data-section='dashboardSelect']") WebElement Dashboardicon; //nextpage reference objects @FindBy(xpath = "//a[@data-name='dataAccess']") WebElement dataaccesrfrnc; @FindBy(xpath = "//div[@class='main-menu-logo']") WebElement Logo; @FindBy(xpath = "//div[@class='row icon-row']") WebElement d1; public String dataiconchk() throws InterruptedException { Thread.sleep(3000); System.out.println(d1.isDisplayed()); System.out.println(Dataaccessicon.isDisplayed()); System.out.println("dataicon reached"); Dataaccessicon.click(); System.out.println("datacliked"); String chumma = dataaccesrfrnc.getText(); return chumma; } }
Тестовый пример моей домашней страницы
package Testcases; import org.openqa.selenium.support.PageFactory; import org.testng.Assert; import org.testng.annotations.Test; import Pages.BaseClass; import Pages.HomePageTR; public class HomePageTestTR extends BaseClass { HomePageTR homepagetr; @Test(priority = 6) public void dataiconchk() throws InterruptedException { homepagetr = PageFactory.initElements(dr, HomePageTR.class); String dataaccessheader = homepagetr.dataiconchk(); Assert.assertEquals(dataaccessheader, "Data Access"); System.out.println("data acces icon checked"); } }
Моя ошибка:
dataiconchk java.lang.NullPointerException at org.openqa.selenium.support.pagefactory.DefaultElementLocator.findElement(DefaultElementLocator.java:69) at org.openqa.selenium.support.pagefactory.internal.LocatingElementHandler.invoke(LocatingElementHandler.java:38) at com.sun.proxy.$Proxy8.isDisplayed(Unknown Source) at Pages.HomePageTR.dataiconchk(HomePageTR.java:77) at Testcases.HomePageTestTR.dataiconchk(HomePageTestTR.java:18) ... Removed 25 stack frames
Richard MacCutchan
Вам нужно проследить назад через трассировку стека, чтобы найти, где в вашем коде находится вызов, который привел к исключению. Затем вы должны быть в состоянии определить, какая переменная является нулевой.
Gerry Schmitz
Нужно ли вам поддерживать ссылку на "каждый класс, который вы запускаете"? Или это "зажги и забудь"?