2015-10-03 2 views
-1

вчера мой тест работает нормально, bust я хочу использовать testng, а затем возникла проблема. Мой главный класс leadTest:java.lang.NullPointerException - selenium java testng

public class leadTest { 
    WebDriver driver; 
    @Test 
    public void f() { 


.. 
... 
... 
      /*------------------------Go to leads page-------------------------------*/ 
     LeadsPage ldsP = new LeadsPage(driver); 

     dbp.gotoLeadsPage(); 

     ldsP.findLeadByName("nameToFind"); 

    } 


    @BeforeClass 
    public void beforeClass() { 
     driver = new FirefoxDriver(); 
     driver.get("http://getbase.com"); 
     driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); 
    } 

и мой класс LeadsPage:

public class LeadsPage { 
    WebDriver driver; 
String expStatus = "new"; 

@FindBy(id="leads-new") 
WebElement addLead; 

@FindBy(className = "lead-status") 
WebElement UserStatus; 


public void addNewLead(){ 
    addLead.click(); 
} 

public void checkUsrStat(){ 
    String stat = UserStatus.getText().toLowerCase(); 
    Assert.assertEquals(stat, expStatus.toLowerCase()); 

} 

public void findLeadByName(String leadName){ 

    driver.findElement(By.partialLinkText(leadName)).click();  
} 

public LeadsPage(WebDriver driver){ 
     PageFactory.initElements(driver, this); 

} 

У меня есть проблемы с этой частью сверху:

public void findLeadByName(String leadName){ 

    driver.findElement(By.partialLinkText(leadName)).click();  
} 

У меня есть ошибка

AILED: f 
java.lang.NullPointerException 
    at leadTest.LeadsPage.findLeadByName(LeadsPage.java:38) 
    at leadTest.leadTest.f(leadTest.java:101) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84) 
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:714) 
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901) 
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231) 
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127) 
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111) 
    at org.testng.TestRunner.privateRun(TestRunner.java:767) 
    at org.testng.TestRunner.run(TestRunner.java:617) 
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:334) 
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329) 
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291) 
    at org.testng.SuiteRunner.run(SuiteRunner.java:240) 
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) 
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) 
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224) 
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1149) 
    at org.testng.TestNG.run(TestNG.java:1057) 
    at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111) 
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204) 
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175) 

Когда i использовать

@FindBy(partialLinkText="nameToFind") 
WebElement ntf; 

и

ntf.click(); 

свои работы, но я не могу сделать это, becouse на месте nameToFind будет переменной.

И я не знаю, что это неправильно ... Пожалуйста, помогите мне

+0

Где вы определяете, и как вы инициализации ЛДСП? –

+0

его ранее в отрезанной части кода «LeadsPage ldsP = new LeadsPage (драйвер);» Я добавил int сейчас, чтобы опубликовать – ciupakabrans

+1

Возможный дубликат [Что такое Исключение Null Указатель и как его исправить?] (Http://stackoverflow.com/questions/218384/what-is-a-null-pointer- exception-and-how-do-i-fix-it) – Louis

ответ

1

переменную драйвера не инициализирован: вы пытаетесь вызвать метод findElement() на несуществующий объект.

Один из способов, чтобы подтвердить, что это напечатает значение драйвера:

System.out.println("driver=" + driver); непосредственно перед тем, генерируется исключение

public void findLeadByName(String leadName){ 

System.out.println("driver=" + driver); 
    driver.findElement(By.partialLinkText(leadName)).click();  
} 

также я заметил,

LeadsPage ldsP = new LeadsPage(driver); 

     dbp.gotoLeadsPage(); 

     ldsP.findLeadByName("nameToFind"); 

gotoLeadsPage(); и findLeadByName(); обе функции находятся в одном классе LeadsPage, но с использованием разных объектов dbp и ldsp

Может быть, изменения ниже будут работать.

в классе LeadsPage измените ваше findLeadByName(); функция следующим образом,

public void findLeadByName(WebDriver driver, String leadName){ 

    this.driver.findElement(By.partialLinkText(leadName)).click();  
} 

и в своем классе leadTest вызова функции findLeadByName() следующим образом,

LeadsPage ldsP = new LeadsPage(driver); 
ldsP.findLeadByName(driver ,"nameToFind"); 
+0

i see, driver = null, но как и где я должен его инициализировать? (извините im begginer) – ciupakabrans

+0

Но gotoLeadsPage(); находится в классе DashboardPage, findLeadByName(); есть в классе LeadsPage его не тот же класс, что и у – ciupakabrans

+0

две минуты pls, я редактирую свой ответ, вы можете напрямую реализовать код. – Mona

Смежные вопросы