0

I have written the below code using Selenium-Java. Then I converted the project into TestNG. But when I run the program I'm getting the below exception.

But the program is running successfully, when i run it as java application

public class Testform {
    WebDriver driver = new FirefoxDriver();
@Test
  public void openBrowser() {
     // System.setProperty("webdriver.gecko.driver", "E://Rijo/DLS/geckodriver.exe");
        //DesiredCapabilities dc = DesiredCapabilities.firefox();
        //dc.setCapability("marionette", true);

  }
@Test
  public void registerForm() {
    // Get the WebElement corresponding to the first name(TextField)        
      WebElement firstname = driver.findElement(By.id("name_3_firstname")); 
        WebElement lastname = driver.findElement(By.id("name_3_lastname")); 
            firstname.isDisplayed();
            firstname.isEnabled();           
            firstname.sendKeys("Zumo");
            lastname.sendKeys("Car");

        WebElement radioBtn = driver.findElement(By.name("radio_4[]"));
            radioBtn.click();   

        WebElement check1 = driver.findElement(By.name("checkbox_5[]"));
            check1.click();

        Select dropdownctry = new Select(driver.findElement(By.name("dropdown_7")));
            dropdownctry.selectByVisibleText("India");
        Select dropdownmnth = new Select(driver.findElement(By.name("date_8[date][mm]")));
            dropdownmnth.selectByVisibleText("1");
        Select dropdownday = new Select(driver.findElement(By.name("date_8[date][dd]")));
            dropdownday.selectByVisibleText("10");
        Select dropdownyear = new Select(driver.findElement(By.name("date_8[date][yy]")));
            dropdownyear.selectByVisibleText("1997");

        WebElement phonenumber = driver.findElement(By.id("phone_9"));
            phonenumber.sendKeys("918877664659");   
        WebElement username = driver.findElement(By.id("username"));
            username.sendKeys("Testngtest123"); 
        WebElement email = driver.findElement(By.id("email_1"));    
            email.sendKeys("rroommff@rr.tt");
        WebElement textarea = driver.findElement(By.name("description"));   
            textarea.sendKeys("Selenium");

      // Get the WebElement corresponding to the Password Field     
      WebElement password = driver.findElement(By.name("password"));                            
            password.sendKeys("Test@test1");
      WebElement confirmpwd = driver.findElement(By.id("confirm_password_password_2"));                         
        confirmpwd.sendKeys("Test@test1");  
  }
@Test
  public void closeForm() {
      WebElement submit = driver.findElement(By.name("pie_submit"));
        submit.click();
  }
}

"And this is my testng.xml file"

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
  <test thread-count="5" name="Test">
    <classes>
      <class name="com.Testform"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

"And I'm getting the below exception."

[RemoteTestNG] detected TestNG version 6.14.2
org.testng.TestNGException: 
Cannot instantiate class com.Testform
    at org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:30)
    at org.testng.internal.ClassHelper.createInstance1(ClassHelper.java:423)
    at org.testng.internal.ClassHelper.createInstance(ClassHelper.java:336)
    at org.testng.internal.ClassImpl.getDefaultInstance(ClassImpl.java:125)
    at org.testng.internal.ClassImpl.getInstances(ClassImpl.java:190)
    at org.testng.TestClass.getInstances(TestClass.java:95)
    at org.testng.TestClass.initTestClassesAndInstances(TestClass.java:81)
    at org.testng.TestClass.init(TestClass.java:73)
    at org.testng.TestClass.<init>(TestClass.java:38)
    at org.testng.TestRunner.initMethods(TestRunner.java:389)
    at org.testng.TestRunner.init(TestRunner.java:271)
    at org.testng.TestRunner.init(TestRunner.java:241)
    at org.testng.TestRunner.<init>(TestRunner.java:192)
    at org.testng.remote.support.RemoteTestNG6_12$1.newTestRunner(RemoteTestNG6_12.java:33)
    at org.testng.remote.support.RemoteTestNG6_12$DelegatingTestRunnerFactory.newTestRunner(RemoteTestNG6_12.java:66)
    at org.testng.SuiteRunner$ProxyTestRunnerFactory.newTestRunner(SuiteRunner.java:713)
    at org.testng.SuiteRunner.init(SuiteRunner.java:260)
    at org.testng.SuiteRunner.<init>(SuiteRunner.java:198)
    at org.testng.TestNG.createSuiteRunner(TestNG.java:1295)
    at org.testng.TestNG.createSuiteRunners(TestNG.java:1273)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1128)
    at org.testng.TestNG.runSuites(TestNG.java:1049)
    at org.testng.TestNG.run(TestNG.java:1017)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:114)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:24)
    ... 25 more
Caused by: java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.gecko.driver system property; for more information, see https://github.com/mozilla/geckodriver. The latest version can be downloaded from https://github.com/mozilla/geckodriver/releases
    at com.google.common.base.Preconditions.checkState(Preconditions.java:847)
    at org.openqa.selenium.remote.service.DriverService.findExecutable(DriverService.java:124)
    at org.openqa.selenium.firefox.GeckoDriverService.access$100(GeckoDriverService.java:41)
    at org.openqa.selenium.firefox.GeckoDriverService$Builder.findDefaultExecutable(GeckoDriverService.java:141)
    at org.openqa.selenium.remote.service.DriverService$Builder.build(DriverService.java:339)
    at org.openqa.selenium.firefox.FirefoxDriver.toExecutor(FirefoxDriver.java:158)
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:120)
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:98)
    at com.Testform.<init>(Testform.java:17)
    ... 30 more

"Could someone please help me regarding this?"

Rijo
  • 1
  • 1
  • 2
    Possible duplicate of [java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.chrome.driver system property](https://stackoverflow.com/questions/46587942/java-lang-illegalstateexception-the-path-to-the-driver-executable-must-be-set-b) – undetected Selenium Mar 28 '18 at 06:18
  • I'm new to selenium(Automation). It will be great if you could explain in detail regarding how to fix the issue..... – Rijo Mar 29 '18 at 05:30

1 Answers1

0

So yes the real error it towards the bottom there where it reads "Caused by: java.lang.IllegalStateException: The path to the driver executable must be set..."

Where you have things commented out, you actually need that 1st line at a minimum --before-- you instantiate a new driver. Do it in your constructor or similar to what you already had but commented out. The DC behavior call I don't use with my Firefox instances.

    WebDriver driver;

    Testform() {
        System.setProperty("webdriver.gecko.driver", "E://Rijo/DLS/geckodriver.exe");
        driver = new FirefoxDriver();
    }
Tim Hallbeck
  • 655
  • 5
  • 7