Checkout our demo site to practice selenium https://magento.softwaretestingboard.com/

0 like 0 dislike
1.4k views
by The go-to Tester (218 points)
I am running a cross browser test using TestNg. My xml is -:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Page Object test ">
<parameter name="appURL" value="https://www.google.co.in/"/>
<parameter name="browserType" value="chrome"/>
  <test name="sample test">
    <classes>
      <class name="pageObjects.BasePAgeTest"/>
    </classes>
  </test>
</suite>

page object is defined as follows

public class BasePAgeTest extends TestBaseSetUp{
    
    private WebDriver driver;
    
    @BeforeClass
    public void setUp() {
        driver=getDriver();
    }
    
    @Test
    public void verifyHomePage() {
        System.out.println("Home page test...");
        BasePage basePage = new BasePage(driver);
        Assert.assertTrue(basePage.verifyBasePageTitle(), "Home page title doesn't match");
    }

}

The error that I get is-:

Parameter 'browserType' is required by @Configuration on method initializeTestBaseSetup but has not been marked @Optional or defined
in C:\Users\HOME\AppData\Local\Temp\testng-eclipse-507229124\testng-customsuite.xml
    at org.testng.internal.Parameters.createParameters(Parameters.java:154)
    at org.testng.internal.Parameters.createParameters(Parameters.java:361)
    at org.testng.internal.Parameters.createConfigurationParameters(Parameters.java:84)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:202)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:143)
    at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:178)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108)
    at org.testng.TestRunner.privateRun(TestRunner.java:778)
    at org.testng.TestRunner.run(TestRunner.java:632)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:366)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:319)
    at org.testng.SuiteRunner.run(SuiteRunner.java:268)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1225)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1150)
    at org.testng.TestNG.runSuites(TestNG.java:1075)
    at org.testng.TestNG.run(TestNG.java:1047)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:126)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:137)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:58)

Please help
by The go-to Tester (181 points)
Can you post your code of TestBaseSetUp file?
by The go-to Tester (218 points)
Test base set up is -:
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;

public class TestBaseSetup {

    private WebDriver driver;
    static String driverPath = "C://Selenium driver//";

    public WebDriver getDriver() {
        return driver;
    }

    private void setDriver(String browserType, String appURL) {
        switch (browserType) {
        case "chrome":
            driver = initChromeDriver(appURL);
            break;
        case "firefox":
            driver = initFirefoxDriver(appURL);
            break;
        default:
            System.out.println("browser : " + browserType
                    + " is invalid, Launching Firefox as browser of choice..");
            driver = initFirefoxDriver(appURL);
        }
    }

    private static WebDriver initChromeDriver(String appURL) {
        System.out.println("Launching google chrome with new profile..");
        System.setProperty("webdriver.chrome.driver", driverPath
                + "chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.manage().window().maximize();
        driver.navigate().to(appURL);
        return driver;
    }

    private static WebDriver initFirefoxDriver(String appURL) {
        System.out.println("Launching Firefox browser..");
        WebDriver driver = new FirefoxDriver();
        driver.manage().window().maximize();
        driver.navigate().to(appURL);
        return driver;
    }

    @Parameters({ "browserType", "appURL" })
    @BeforeClass
    public void initializeTestBaseSetup(String browserType, String appURL) {
        try {
            setDriver(browserType, appURL);

        } catch (Exception e) {
            System.out.println("Error....." + e.getStackTrace());
        }
    }
   
    @AfterClass
    public void tearDown() {
        driver.quit();
    }
}

2 Answers

0 like 0 dislike
by The go-to Tester (181 points)
selected by
 
Best answer

I see that, you have you are already declared your parameter in xml file. Are you initiating your tests using the xml file? Do not right click on your test class file and run it as TestNG test, if you are using eclipse. Right click on your suite xml and run it as TestNG suite file.

Let us know if you are not using eclipse. How are you initiating your test?

by The go-to Tester (218 points)
Thank solves my problem. I can run test from xml file now. Thanks!!!
0 like 1 dislike
by
i am getting error [TestHTMLReporter] The system cannot find the path specified
by Master (1.2k points)
@Ritesh, request you to post it as a new question with all details....

-Mayur


This site is for software testing professionals, where you can ask all your questions and get answers from 1300+ masters of the profession. Click here to submit yours now!

...