Parameters is passing default value in TestNG

17,765

From testng documentation, this is how @optional is used.

@Parameters("db")
@Test
public void testNonExistentParameter(@Optional("mysql") String db) { ... }

If no parameter named "db" is found in your testng.xml file, your test method will receive the default value specified inside the @Optional annotation: "mysql".

Try by correcting your code accordingly. I think that should resolve the issue. If it still doesn't then declare the parameters at the suite tag level in testng.xml and test it.

Share:
17,765
Learner
Author by

Learner

Updated on June 08, 2022

Comments

  • Learner
    Learner almost 2 years

    I'm facing the strange problem. Before writing here, I have done some research on this, but unable to solve the issue.

    I'm passing parameters but it is taking the default value for the parameter i.e. "no-Value".

    Here is my code

    package rough;
    
    
    import org.testng.annotations.AfterMethod;
    import org.testng.annotations.Optional;
    import org.testng.annotations.Parameters;
    import org.testng.annotations.Test;
    import org.testng.annotations.BeforeMethod;
    import org.testng.Assert;
    
    import java.util.regex.Pattern;
    import java.util.concurrent.TimeUnit;
    
    import org.junit.*;
    
    import static org.hamcrest.CoreMatchers.*;
    
    import org.openqa.selenium.*;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.ie.InternetExplorerDriver;
    import org.openqa.selenium.support.ui.Select;
    
    public class Browsers {
        private WebDriver driver;
        private String baseUrl;
        private boolean acceptNextAlert = true;
        private StringBuffer verificationErrors = new StringBuffer();
    
        @BeforeMethod
        public void tearDown1() throws Exception {
            System.out.println("Hello starting");
    
        }
        @Test
        @Parameters({ "BROWSER" })
        public void setUp(@Optional String BROWSER) throws Exception {
    
            if(BROWSER.equalsIgnoreCase("FF"))
            {   
                driver = new FirefoxDriver();
            }
            else
            if(BROWSER.equalsIgnoreCase("IE"))
            {    
                System.setProperty("webdriver.ie.driver", "g:/Selenium Jar Files/IEDriverServer.exe");
                driver = new InternetExplorerDriver();
            }
    
            baseUrl = "http://book.theautomatedtester.co.uk/";
            driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    
            System.out.println("Hello starting1111");
            driver.get(baseUrl+"/chapter1");
            driver.findElement(By.id("radiobutton")).click();
            Select(driver.findElement(By.id("selecttype"))).selectByVisibleText("Selenium RC");
        }
    
        @AfterMethod
        public void tearDown() throws Exception {
    
            String verificationErrorString = verificationErrors.toString();
            if (!"".equals(verificationErrorString)) {
                Assert.fail(verificationErrorString);
            }
        }
    
        private boolean isElementPresent(By by) {
            try {
                driver.findElement(by);
                return true;
            } catch (NoSuchElementException e) {
                return false;
            }
        }
    
        private boolean isAlertPresent() {
            try {
                driver.switchTo().alert();
                return true;
            } catch (NoAlertPresentException e) {
                return false;
            }
        }
    
        private String closeAlertAndGetItsText() {
            try {
                Alert alert = driver.switchTo().alert();
                String alertText = alert.getText();
                if (acceptNextAlert) {
                    alert.accept();
                } else {
                    alert.dismiss();
                }
                return alertText;
            } finally {
                acceptNextAlert = true;
            }
        }
    }
    

    The XML used here is

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    <suite name="Suite" parallel="True">
      <test name="Test">
      <parameter name = "BROWSER" value="FF"/>
        <classes>
              <class name="rough.Browsers"/>
        </classes>
        <test name="Test">
        <parameter name = "BROWSER" value="IE"/>
        <classes>
           <class name="rough.Browsers"/>
        </classes>
      </test> <!-- Test -->
    </suite> <!-- Suite -->
    

    When I'm running the code getting this error:

    [TestNG] Running:
      C:\Users\Administrator\AppData\Local\Temp\testng-eclipse-2137105747\testng-customsuite.xml
    
    Hello starting
    FAILED: setUp("not-found")
    java.lang.NullPointerException
        at rough.Browsers.setUp(Browsers.java:55)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84)
        at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
        at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
        at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
        at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
        at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
        at org.testng.TestRunner.privateRun(TestRunner.java:767)
        at org.testng.TestRunner.run(TestRunner.java:617)
        at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
        at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
        at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
        at org.testng.SuiteRunner.run(SuiteRunner.java:240)
        at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
        at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
        at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224)
        at org.testng.TestNG.runSuitesLocally(TestNG.java:1149)
        at org.testng.TestNG.run(TestNG.java:1057)
        at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)
        at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)
        at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)
    
  • Vish
    Vish over 8 years
    i am seeing htis param :Exception in thread "main" com.beust.jcommander.ParameterException: Unknown option: -serport any idea
  • MasterJoe
    MasterJoe about 4 years
    Suppose the method takes a class Database instead of String db, then can we still use Optional?