2015-05-28 3 views
0

Я создал класс, в котором определены объекты страницы. Затем я пытаюсь использовать этот класс в тестовом классе с помощью конструктора. Однако, когда я запускаю тестовый класс с помощью JUnit, я получаю ошибку NullPointerException.Исключение исключения нулевой указатель Selenium при попытке использовать конструктор

Page_Objects Класс:

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 

import java.util.regex.Pattern; 
import java.util.concurrent.TimeUnit; 

import org.junit.*; 

import static org.junit.Assert.*; 
import static org.hamcrest.CoreMatchers.*; 

import org.openqa.selenium.*; 
import org.openqa.selenium.support.ui.Select; 

public class Page_Objects { 

    private WebDriver driver; 

    WebElement Username = driver.findElement(By.id("username")); 
    // ERROR: Caught exception [Error: locator strategy either id or name must be specified explicitly.] 
    WebElement Password = driver.findElement(By.id("password")); 
    WebElement Login_Button = driver.findElement(By.id("Login")); 
    WebElement Logout_Button = driver.findElement(By.linkText("Logout")); 

} 

тест:

import java.util.regex.Pattern; 
import java.util.concurrent.TimeUnit; 
import org.junit.*; 
import static org.junit.Assert.*; 
import static org.hamcrest.CoreMatchers.*; 
import org.openqa.selenium.*; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.support.ui.Select; 

public class Salesforce_Test { 
    private WebDriver driver1; 
    private String baseUrl; 
    private boolean acceptNextAlert = true; 
    private StringBuffer verificationErrors = new StringBuffer(); 

    Page_Objects pageobjects = new Page_Objects(); 

    @Before 
    public void setUp() throws Exception { 
    driver1 = new FirefoxDriver(); 
    baseUrl = "some url for testing/"; 
    driver1.navigate().to(baseUrl); 
    driver1.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
    } 

    @Test 
    public void Login_Logout() throws Exception { 

    pageobjects.Username.sendKeys("someusername"); 

    // ERROR: Caught exception [Error: locator strategy either id or name must be specified explicitly.] 
    pageobjects.Password.sendKeys("somepassword"); 

    pageobjects.Login_Button.click(); 

    pageobjects.Logout_Button.click(); 

    } 

    @After 
    public void tearDown() throws Exception { 
    driver1.quit(); 
    String verificationErrorString = verificationErrors.toString(); 
    if (!"".equals(verificationErrorString)) { 
     fail(verificationErrorString); 
    } 
    } 

    private boolean isElementPresent(By by) { 
    try { 
     driver1.findElement(by); 
     return true; 
    } catch (NoSuchElementException e) { 
     return false; 
    } 
    } 

    private boolean isAlertPresent() { 
    try { 
     driver1.switchTo().alert(); 
     return true; 
    } catch (NoAlertPresentException e) { 
     return false; 
    } 
    } 

    private String closeAlertAndGetItsText() { 
    try { 
     Alert alert = driver1.switchTo().alert(); 
     String alertText = alert.getText(); 
     if (acceptNextAlert) { 
     alert.accept(); 
     } else { 
     alert.dismiss(); 
     } 
     return alertText; 
    } finally { 
     acceptNextAlert = true; 
    } 
    } 
} 

Когда я бегу выше класс I исключения нулевого указателя.

java.lang.NullPointerException 
    at Page_Objects.<init>(Page_Objects.java:20) 
    at Salesforce_Test.<init>(Salesforce_Test.java:16) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 

ответ

0

Здесь я вижу два вопроса. Во-первых, класс Page_Objects вызывается перед началом работы с драйвером. Вот почему, когда вы звоните
Page_Objects pageobjects = new Page_Objects(); вы получаете NullPointerException. Итак, вы хотите инициировать Page_Objects после того, как вы инициировали драйвер. Во-вторых, вам нужно передать экземпляр инициируемого вами драйвера, потому что сейчас у него есть собственный частный драйвер, который не инициирован, и поэтому он имеет значение null. Короче говоря:

  • Инициировать Page_Objects после того как вы инициировали драйвер (после driver1 = new FirefoxDriver(); линии)
  • Назовите это с водителем вы инициированной: Page_Objects pageobjects = new Page_Objects(driver1);
+0

Спасибо. Казалось, это сработало. Сначала мне нужно было создать некоторые методы в классе Page_Objects. – John

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