2017-07-05 6 views
0

Ich habe NullPointerException, wenn ich die @testCase ausführen
1. In FrameworkTestCases.class -> @BeforeClass initialisiere ich die Instanz des ausgewählten Webdriver. Der Browser wird ausgeführt, wenn ich die FrameworkTestCases.class als jUnit-Test starte, aber wenn ich die testCase erreiche, heißt es NullPointerException. Was ist der Grund? Ich habe auch einen Konstruktor mit 2 Argumenten verwendet, um den Treiber von der Generic.class in LoginPageFactory.class zu erben, aber nichts ist passiert.WebDriver kann nicht initialisiert werden

Hier ist meine FrameworkTestCases Klasse:

public class FrameworkTestCases { 

static WebDriver driver; 
private static String baseURl = "https://management.tacticlicks.com/"; 
static LoginPageFactory loginPage; 
static Generic generic; 
//WebDriver driver; 
//static LoginPageFactory lpFactory; 


@BeforeClass 
public static void setUp() {   
    generic = new Generic(driver); 
    generic.getDriver(baseURl, "chrome"); 
} 

@Test 
public void test() { 
    System.out.println("Executing test"); 

    loginPage 
    .fillUsernameField("[email protected]") 
    .fillPasswordField("astral8909") 
    .clickSubmit(); 
} 


@AfterClass 
public static void tearDown() { 
    driver.quit(); 
} 
} 

public class LoginPageFactory extends Generic { 

public LoginPageFactory(WebDriver driver2, Class<LoginPageFactory> class1) { 
    super(driver2, class1); 
    // TODO Auto-generated constructor stub 
} 

WebDriver driver; 

@FindBy(name="email") //.//*[@id='login']/div[1]/div/div/table/tbody/tr/td[2]/div[1]/form/div[1]/input 
WebElement loginUsernameField; 

@FindBy(name="password") 
WebElement loginPasswordField; 

@FindBy(tagName="button") 
WebElement loginSubmitButton; 

public LoginPageFactory(WebDriver driver) { 
    System.out.println("LoginPageFactory"); 
    this.driver = driver; 
    PageFactory.initElements(driver, this); 
} 

public LoginPageFactory fillUsernameField(String username) { 
    System.out.println("Before field initializing"); 
    WebElement emailField = driver.findElement(By.name("email")); 
    emailField.click(); 
    emailField.sendKeys(username); 
    return this; 
} 

public LoginPageFactory fillPasswordField(String password) { 
    loginPasswordField.click(); 
    loginPasswordField.clear(); 
    loginPasswordField.sendKeys(password); 
    return this; 
} 

public LoginPageFactory clickSubmit() { 
    loginSubmitButton.click(); 
    return this; 
} 
} 

public class Generic { 

WebDriver driver; 

public Generic(WebDriver driver) { 
    this.driver = driver; 
} 

public Generic(WebDriver driver2, Class<LoginPageFactory> class1) { 
    // TODO Auto-generated constructor stub 
} 

private void getBrowser(String browser) { 

    if (browser.equalsIgnoreCase("Firefox")) { 
     File chromeDriver = new File("C:\\Users\\Ivo\\Desktop\\geckodriver.exe"); 
     System.setProperty("webdriver.gecko.driver", chromeDriver.getAbsolutePath()); 
     driver = new FirefoxDriver(); 
    } else if (browser.equalsIgnoreCase("Chrome")) { 

     //set chromedriver property 
     File chromeDriver = new File("C:\\Users\\Ivo\\Desktop\\chromedriver.exe"); 
     System.setProperty("webdriver.chrome.driver", chromeDriver.getAbsolutePath()); 
     driver = new ChromeDriver(); 


    } else { 
     System.out.println("Browser cannot be launched"); 
    } 

} 

public WebDriver getDriver(String appUrl, String browser) { 
    getBrowser(browser); 
    driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); 
    driver.manage().window().maximize(); 
    driver.get(appUrl); 
    return driver; 
} 
} 
+1

Mögliches Duplikat [Vermeiden! = Null Aussagen] (https://stackoverflow.com/questions/271526/avoiding-null-statements) – DebanjanB

Antwort

0

Sie sind eine variable Zuordnung in @BeforeClass Verfahren fehlt.

ändern

@BeforeClass 
public static void setUp() {   
    generic = new Generic(driver); 
    generic.getDriver(baseURl, "chrome"); 
} 

zu

@BeforeClass 
public static void setUp() {   
    generic = new Generic(driver); 
    driver = generic.getDriver(baseURl, "chrome"); 
} 

Und auch haben Sie keine Instanz von LoginPageFactory Klasse erstellen. Sie haben eine Variable static LoginPageFactory loginPage; erstellt, aber nicht initialisiert (zumindest nirgends im angegebenen Code). In Verfahren

@Test 
public void test() { 
    System.out.println("Executing test"); 

    //add this line of code to initialize elements via Page Factory 
    loginPage = new LoginPageFactory(driver); 

    loginPage 
    .fillUsernameField("[email protected]") 
    .fillPasswordField("astral8909") 
    .clickSubmit(); 
} 
+0

Oh, vielen Dank. Jetzt funktioniert es. Ich stimme für Ihre Antwort, aber mein Ruf ist sehr gering. – ils

+0

Sie können meine Antwort akzeptieren, anstatt sie zu aktualisieren. In diesem Fall verdienen wir beide Reputationspunkte. Sie können es hier lesen: https://stackoverflow.com/help/someone-answers –

Verwandte Themen