Reputation: 71
I am having issue running the below Page Object Model with testng.
TestClass 1
package Proj;
public class signInPage {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver", "C:/chromedriver_win32/chromedriver.exe");
ChromeDriver driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}
public signInPage (WebDriver driver)
{
this.driver=driver;
}
WebDriver driver;
public signInPage()
{
driver.get("baseURL");
}
By Email_address = By.name("Username");
By Password = By.id("Password");
public WebElement Email_address ()
{
return driver.findElement(Email_address);
}
public WebElement Password ()
{
return driver.findElement(Password);
}
public WebElement button_id ()
{
return driver.findElement(button_id);
}
}
TestClass 2
package Proj;
public class MyDetailsPage {
public MyDetailsPage (WebDriver driver)
{
this.driver=driver;
}
WebDriver driver;
By My_Details=By.xpath(".//*[@id='masterForm']/div[5]/div/div[3]/div[3]/a/span");
By First_name = By.id("FirstName");
By Last_name= By.name("NameModel.LastName");
By button_id= By.id("stage_one_button");
public WebElement My_Details ()
{
return driver.findElement(My_Details);
}
public WebElement First_name ()
{
return driver.findElement(First_name);
}
public WebElement Last_name ()
{
return driver.findElement(Last_name);
}
}
TestData Page
package Proj;
public class testData {
public static void main (String[] args) throws InterruptedException {
System.setProperty("webdriver.chrome.driver", "C:/chromedriver_win32/chromedriver.exe");
ChromeDriver driver = new ChromeDriver();
}
public void testDetails (WebDriver driver)
{
this.driver=driver;
}
static WebDriver driver;
protected static String baseUrl;
protected static String Email_address;
protected static String Password;
protected String First_name;
protected String Last_name;
public void Data () {
baseUrl = "https://login.yahoo.com/";
driver = new ChromeDriver();
Email_address = "[email protected]";
Password = "myname";
First_name = "Testing";
Last_name = "Account";
}
}
TestCases
package Proj;
import org.testng.annotations.Test;
import org.openqa.selenium.SearchContext;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeSuite;
public class TestCases extends testData {
private static SearchContext WebElement;
@BeforeSuite
public void BeforeSuite () {
System.setProperty("webdriver.chrome.driver", "C:/chromedriver_win32/chromedriver.exe");
WebDriver driver = new ChromeDriver ();
}
@BeforeClass
public void driver(WebDriver driver) throws InterruptedException
{
this.driver = driver;
driver.get(baseUrl);
}
@Test
public void AllTest () throws InterruptedException {
signInPage a = new signInPage (driver);
a.Email_address().sendKeys(Email_address);
a.Password().sendKeys(Password);
a.SIGN_IN().click();
MyDetailsPage e = new MyDetailsPage (driver);
e.My_Details ().click();
e.First_name ().sendKeys("Testing");
e.Last_name (). sendKeys ("Account");
e.button_id ().click();
}
}
It opens up Browser but fail to enter baseUrl and could not perform the Test. It is failing from the TestCases class. No matter how i have tried to reconfigure this with no luck. I appreciate your prompt assistance. Thank you
FAILED CONFIGURATION: @BeforeClass driver
org.testng.TestNGException:
Can inject only one of <ITestContext, XmlTest> into a BeforeClass annotated driver.
For more information on native dependency injection please refer to http://testng.org/doc/documentation-main.html#native-dependency-injection
at org.testng.internal.Parameters.checkParameterTypes(Parameters.java:244)
at org.testng.internal.Parameters.createParameters(Parameters.java:172)
at org.testng.internal.Parameters.createParameters(Parameters.java:458)
at org.testng.internal.Parameters.createConfigurationParameters(Parameters.java:118)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:206)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:146)
at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:166)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:105)
at org.testng.TestRunner.privateRun(TestRunner.java:744)
at org.testng.TestRunner.run(TestRunner.java:602)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:380)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:375)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
at org.testng.SuiteRunner.run(SuiteRunner.java:289)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1301)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1226)
at org.testng.TestNG.runSuites(TestNG.java:1144)
at org.testng.TestNG.run(TestNG.java:1115)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76)
SKIPPED: AllTest
org.testng.TestNGException:
Can inject only one of <ITestContext, XmlTest> into a BeforeClass annotated driver.
For more information on native dependency injection please refer to http://testng.org/doc/documentation-main.html#native-dependency-injection
at org.testng.internal.Parameters.checkParameterTypes(Parameters.java:244)
at org.testng.internal.Parameters.createParameters(Parameters.java:172)
at org.testng.internal.Parameters.createParameters(Parameters.java:458)
at org.testng.internal.Parameters.createConfigurationParameters(Parameters.java:118)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:206)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:146)
at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:166)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:105)
at org.testng.TestRunner.privateRun(TestRunner.java:744)
at org.testng.TestRunner.run(TestRunner.java:602)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:380)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:375)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
at org.testng.SuiteRunner.run(SuiteRunner.java:289)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1301)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1226)
at org.testng.TestNG.runSuites(TestNG.java:1144)
at org.testng.TestNG.run(TestNG.java:1115)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76)
===============================================
Default test
Tests run: 1, Failures: 0, Skips: 1
Configuration Failures: 1, Skips: 0
===============================================
===============================================
Default suite
Total tests run: 1, Failures: 0, Skips: 1
Configuration Failures: 1, Skips: 0
===============================================
Upvotes: 1
Views: 332
Reputation: 3384
As juherr pointed out that you can not parameterize the @BeforeClass in this manner by passing webdriver instead you can follow following approach to do so:
public class TestCases extends testData {
private static SearchContext WebElement;
WebDriver driver;
@BeforeSuite
public void BeforeSuite () throws InterruptedException {
System.setProperty("webdriver.chrome.driver", "C:\\Eclipse\\Selenium\\chromedriver.exe");
}
@BeforeClass
public void driver() throws InterruptedException
{
driver = new ChromeDriver ();
testData td = new testData ();
driver.get(td.baseUrl);
}
/
/
/
/
Upvotes: 1
Reputation: 5740
public void driver(WebDriver driver)
is not allowed on a @BeforeClass
method. You have to remove the parameter and find another way to set the driver
.
Upvotes: 1