khris
khris

Reputation: 4999

how call external class (contains selenium commands) in selenium test properly?

I use Selenium Web Driver with JUnit in Eclipse. I want diminish my code by creating new classes for repitable steps. I want store this classes in separate files for convenience. For example this one of such classes:

import org.openqa.selenium.ie.InternetExplorerDriver;

 //Login
public class Login {
private InternetExplorerDriver driver;

String url;
String name;
String password;
String language;
public Login (String ur, String nam, String pass, String lang){
    url=ur;
    name=nam;
    password=pass;
    language=lang;
}
 public void log_in (){
 driver.get(url);
 driver.findElement(By.name("username")).sendKeys(name);    
 driver.findElement(By.name("password")).sendKeys(password);    
 driver.findElement(By.name("language")).sendKeys(language);    
 driver.findElement(By.name("logon_action")).click(); 
  }  
  }

This is my main test:

package bobsworld;

import init.Login;

import org.junit.Assert;
import org.junit.Test;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.ie.InternetExplorerDriver;


public class WebTest {
private WebDriver driver;


@Test
public void testUnit() throws Exception {

//Open new window
System.setProperty("webdriver.ie.driver", "IEDriverServer.exe");
driver = new InternetExplorerDriver();

//Login 
init.Login login = new init.Login ("myurl", "log","pas","English");
  login.log_in();
}

The problem is with object driver. I get java.lang.NullPointerException and can't execute test. How should I organize call to Login and code to make my test work?

Upvotes: 1

Views: 1703

Answers (1)

Franz Ebner
Franz Ebner

Reputation: 5106

What you try to achieve is a quite popular approach called "PageObjects".

Your issues:

  1. Use some checkstyle tool to improve code quality

  2. Do a whole lot of research about Java in general

  3. The Login Class or "init.Login" (it's quite unusual to have a part of the package as prefix for the class) is not able to use the same WebDriver instance because you don't forward it. Normally you would have opened a second WebDriver instance but that seems to be impossible though I don't know your setup. You have to forward the "driver" as a parameter to the constructor of the Login class.

  4. Try to use real PageObjects as described here inluding PageFactory to improve readability and maintainability

Upvotes: 2

Related Questions