Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Parameters is passing default value in TestNG

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)
like image 365
Learner Avatar asked Mar 06 '14 15:03

Learner


People also ask

What is the default value of TestNG?

Common Questions On Priority In TestNG A tester can provide a priority value to the test case by defining the priority parameter with @Test annotation. Moreover, if there is no priority defined, the default priority is zero (0) for that test case.

Is parameters a valid TestNG annotation?

Parameters Annotation in TestNG is a method used to pass values to the test methods as arguments using . xml file. Users may be required to pass the values to the test methods during run time. The @Parameters annotation method can be used in any method having @Test, @Before, @After or @Factory annotation.

What are the parameters of TestNG?

TestNG Parameters are present in the xml file. They can be applied either inside the tag or tag. If we want to apply the parameters to all the test cases, then the parameters are applied inside the tag. If the parameter is specific to a particular folder, then the parameter is applied within a tag.


1 Answers

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.

like image 182
Akbar Avatar answered Oct 19 '22 17:10

Akbar