I am using selenium webdriver, maven for dependency and java lanaguage and I'm following page object design pattern. This is my first time I am using maven. I am automating a login page. Here browser should be open but the username and password can't be automate.. Here is the code..
package pageobjects;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.How;
/**
* Created by naveen on 29/11/16.
*/
public class HomePage {
@FindBy(how= How.NAME, using = "username")
WebElement username;
@FindBy(how=How.NAME, using = "password")
WebElement password;
@FindBy(how=How.XPATH, using="//*[@id=\'login-container\']/form/div[3]/div/p/input[1]" )
WebElement button;
//enter username
public void setUsername(String user)
{
username.sendKeys(user);
}
//enter password
public void setPassword(String pass)
{
password.sendKeys(pass);
}
//click login
public void clickButton()
{
button.submit();
}
}
Steps:
package steps;
import org.openqa.selenium.support.PageFactory;
import pageobjects.HomePage;
import util.DriverManager;
/**
* Created by srikanth on 20/11/16.
*/
public class LoginSteps {
public HomePage Login(String name, String pwd) {
HomePage homePageObj = PageFactory.initElements(DriverManager.driver, HomePage.class);
homePageObj.setUsername(name);
homePageObj.setPassword(pwd);
homePageObj.clickButton();
return homePageObj;
}
}
Login:
package login;
import org.testng.annotations.*;
import org.testng.Assert;
import pageobjects.HomePage;
import steps.LoginSteps;
import util.DriverManager;
public class loginTest
{
@BeforeSuite(groups = {"regression"})
public void initDriver(){
DriverManager manager = new DriverManager();
}
@Test
@Parameters({"userName","password"})
public void verifyValidLogintoSpree(String name, String pwd)
{
LoginSteps loginSteps = new LoginSteps();
HomePage expected_message=loginSteps.Login(name,pwd);
Assert.assertEquals(expected_message,"MY ACCOUNT");
}
}
TestNG config:
testng.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Regression">
<parameter name="userName" value="geosony"/>
<parameter name="password" value="1"/>
<test name="regression">
<groups>
<run>
<include name="regression"/>
<exclude name="sanity"/>
</run>
</groups>
<classes>
<class name="login.loginTest"/>
</classes>
</test>
</suite>
Error :
org.testng.TestNGException: Parameter 'userName' is required by @Test on method verifyValidLogintoSpree but has not been marked @Optional or defined in /home/naveen/.IdeaIC2016.2/system/temp-testng-customsuite.xml
at org.testng.internal.Parameters.createParameters(Parameters.java:156) at org.testng.internal.Parameters.createParameters(Parameters.java:370) at org.testng.internal.Parameters.handleParameters(Parameters.java:495) at org.testng.internal.Invoker.handleParameters(Invoker.java:1253) at org.testng.internal.Invoker.createParameters(Invoker.java:980) at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1070) at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129) at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112) at org.testng.TestRunner.privateRun(TestRunner.java:753) at org.testng.TestRunner.run(TestRunner.java:607) at org.testng.SuiteRunner.runTest(SuiteRunner.java:368) at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:363) at org.testng.SuiteRunner.privateRun(SuiteRunner.java:321) at org.testng.SuiteRunner.run(SuiteRunner.java:270) at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) at org.testng.TestNG.runSuitesSequentially(TestNG.java:1284) at org.testng.TestNG.runSuitesLocally(TestNG.java:1209) at org.testng.TestNG.runSuites(TestNG.java:1124) at org.testng.TestNG.run(TestNG.java:1096) at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72) at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:124) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Default Suite Total tests run: 1, Failures: 1, Skips: 0 Process finished with exit code 0
parameters
tag should not be included intotest
tag testng.org/doc/documentation-main.html#parameters