Я использую один и тот же файл функций для входа в систему в качестве 2 пользователей для добавления и утверждения. Но во время работы он показывает исключение нулевого указателя

Я только начал использовать Cucumber с селеном. Пожалуйста, игнорируйте, если есть какие-либо ошибки с моей стороны. У меня есть 2 сценария. 1. Войдите как пользователь А и добавьте профиль. 2. Войдите в систему как пользователь B и подтвердите профиль.

У меня есть один и тот же файл для двух сценариев. Файл функции показан ниже,

@Login 
Scenario Outline: Login into application with valid credentials
Given enter '<Username>' and '<Password>'   
When clicking submit button
Then System should logged into application 
Examples:
|Username|Password    |
|aaaa    |aaa@123     |

@LoginApprover 
Scenario Outline: Login as Approver application with valid credentials
Given enter approver credentials '<AppUsername>' and '<AppPassword>'    
When clicking login button
Then Approver should be logged into application 
Examples:
|AppUsername|AppPassword |
|bbb        |bbb@123   |

Мой класс объекта страницы

public class Login extends AllDetails {

public Login(WebDriver dr) {
    driver = dr;

}

private final  By USERNAME = By.cssSelector("#wwww");
private final  By PASSWORD = By.cssSelector("#eeee");
private final  By SIGNIN_BUTTON = By.cssSelector("#login");

private final By ALERTMSG = By.xpath("//*[@class='alert alert-danger']/p");
public void enterUsername(String userName) {
    waitUntilElementIsDisplayedOnScreen(USERNAME);
    sendKeys(USERNAME, userName);
}

public void enterPassword(String password) {
    waitUntilElementIsDisplayedOnScreen(PASSWORD);
    sendKeys(PASSWORD, password);
}

public void clickSignInButton() {
    click(SIGNIN_BUTTON);
}

public void alertmessageVerification(String msg) {

    try {
        String mesg = driver.findElement(ALERTMSG)
                .getAttribute("innerText");

        Assert.assertEquals("Following message prompted successfully", msg,
                message);
    } catch (Exception e) {
        System.out.println(String.format(
                "Following Message is not prompted ", msg));
    }
}

Мой класс определения шага,

public class LoginDefn extends details{

@Given("^enter '(.*)' and '(.*)'$")
public void enter_username_and_password(String username, String password)
        throws Throwable {
    lp=getPageFactoryObject(Login.class);
    lp.enterUsername(username);
    lp.enterPassword(password);
}

@When("^clicking submit button$")
public void clicking_submit_button() throws Throwable {
    lp.clickSignInButton();     
}


@Then("^System should logged into application$")
public void system_should_logged_into_application() throws Throwable {

}

@Then("^System should not logged into application and prompt msg as(.*)$")
public void system_should_not_logged_into_application_and_prompt_msg_as_Invalid_username_and_password(String msg) throws Throwable {
    Thread.sleep(2000);
    lp.alertmessageVerification(msg);       
    //lp.clearusernameandpassword();
}

@Given("^enter approver credentials '(.*)' and '(.*)'$")
public void enter_approver_credentials_and_(String appusername, String apppassword) throws Throwable {
    lp.enterUsername(appusername);
    lp.enterPassword(apppassword);
}

@When("^clicking login button$")
public void clicking_login_button() throws Throwable {
    lp.clickSignInButton();
}

@Then("^Approver should be logged into application$")
public void approver_should_be_logged_into_application() throws Throwable {
    //do nothing
}

} Мой класс запуска тестов

@ContextConfiguration(loader = AnnotationConfigContextLoader.class)
@CucumberOptions(features = { "src\\test\\java\\com\\Features\\" }, glue = 
{"definitions" }, plugin = {
"pretty", "json:target/cucumber.json" }, tags = 
{"@Login,@LoginApprover"}, monochrome = true)
@RunWith(Cucumber.class)

Кто-нибудь, пожалуйста, помогите мне решить эту проблему.


person kripindas    schedule 10.04.2017    source источник
comment
Если возможно, предоставьте подробности и java-файлы AllDetails.   -  person Akarsh    schedule 12.04.2017
comment
@Akarsh.Спасибо за беспокойство. Проблема устранена. Для входа утверждающего я удалил тег Loginapprover. Теперь это работает.   -  person kripindas    schedule 13.04.2017


Ответы (1)


Я не вижу, где вы определяете тип «lp», используемый в вашем классе шагов. Я вижу, что вы пытаетесь инициализировать его там, но я никогда не объявлял его. Вероятно, вы имеете в виду определить его как класс Login (ваш объект страницы). Если вы собираетесь использовать его на каждом (или почти на каждом) шаге, вы должны определить его внутри класса шагов как:

public class LoginDefn extends details{

Login lp;

@Given("^enter '(.*)' and '(.*)'$")

public void enter_username_and_password(String username, String password)
        throws Throwable {
    lp=getPageFactoryObject(Login.class);

Тогда остальная часть кода, я думаю, будет работать без ошибок, но я не стал углубляться, заметив это.

person Bill Hileman    schedule 11.04.2017
comment
На самом деле я добавлял профиль, используя другой файл функций, в это время после добавления профиля я должен войти в систему как другой пользователь и утвердить его. Проблема устранена путем добавления логина утверждающего в тот же файл функций. Спасибо за ваше предложение. - person kripindas; 13.04.2017