0

Je viens de commencer à utiliser du concombre avec du sélénium. S'il vous plaît ignorer s'il y a des erreurs de mon côté. J'ai 2 scénarios. 1. Connectez-vous en tant qu'utilisateur A et ajoutez un profil. 2. Se connecter en tant qu'utilisateur B et approuver le profilSuis en utilisant un même fichier de caractéristiques pour la connexion en tant que 2 utilisateurs pour ajouter et approuver. Mais en cours d'exécution, il montre une exception de pointeur nul

J'ai un même fichier pour les deux scénarios. fichier Feature est illustré ci-dessous,

@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 |[email protected]  | 

@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  |[email protected] | 

Ma page classe d'objets

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)); 
    } 
} 

Ma classe de définition de l'étape,

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 
} 

} Mon coureur de test classe

@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) 

Tout le monde s'il vous plaît aidez-moi à résoudre ce problème.

+0

Si possible, fournissez des détails et des fichiers java AllDetails. – Akarsh

+0

@ Akarsh.Merci pour votre préoccupation. Le problème a été corrigé. Pour la connexion de l'approbateur, j'ai retiré le tag Loginapprover. Maintenant ça marche. – kripindas

Répondre

0

Je ne vois pas où vous définissez le type de "lp" utilisé dans votre classe d'étapes. Je vois que vous essayez de l'initialiser là, mais il n'a jamais été déclaré que je puisse voir. Vous avez probablement l'intention de le définir en tant que classe Login (votre objet page). Si vous avez l'intention de l'utiliser dans tous (ou presque tous) étape, vous devez définir dans les étapes de classe:

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); 

Puis le reste du code, je pense, travailleriez sans erreur, mais je ne pas plonger beaucoup plus profond en repérant cela.

+0

En fait, j'ajoutais un profil en utilisant un autre fichier de caractéristiques, après ce moment, après avoir ajouté le profil, je dois me connecter comme un autre utilisateur et l'approuver. Le problème a été résolu en ajoutant le login de l'approbateur dans le même fichier de fonctionnalité. Merci pour votre suggestion. – kripindas