title: TestNG + Selenium woes. noClassDef error, TestNG based selenium test
body: <p>I've followed a lot of the guides and forum posts online but haven't had any luck getting this to work inside TestNG.  It's a selenium grid based test, programmed in eclipse.
  Had trouble, so used the libraries listed in the suggestion of this forum post: <a href="http://clearspace.openqa.org/message/66867" rel="nofollow noreferrer">http://clearspace.openqa.org/message/66867</a></p>
  
  <p>I am trying to run the suite in the testNG test plugin for eclipse (org.testng.eclipse).  Also tried running the jar from command line through selenium grid to no avail.</p>
  
  <p>Since I'm not a java developer, to be honest I'm not entirely sure what to look for.  I've some familiarity with Java thanks to the Processing environment, but I've kind of been thrown into java/eclipse for this task and am at a bit of a loss.  Anyway, any help is appreciated and thank you in advance.</p>
  
  <p>Here's my code:</p>
  
  <p>suite.java:</p>
  
  <pre><code>    package seleniumRC;
  //import com.thoughtworks.selenium.*;
  //import junit.framework.*;
  //import java.util.regex.Pattern; 
  
  //import static org.testng.AssertJUnit.assertTrue;
   //import org.testng.annotations.AfterMethod;
  //import org.testng.annotations.BeforeMethod;
  //import org.testng.annotations.Parameters;
  import org.testng.annotations.Test;
  
  
  public class suite extends Testcase1 {
  
  @Test(groups = {"example", "firefox", "default"}, description = "test1")
      public void user1() throws Throwable {   
       testCase1();
      }
  
  @Test(groups = {"example", "firefox", "default"}, description = "test2")
      public void user2() throws Throwable {
  
       testCase1();
      }
  
  } 
  </code></pre>
  
  <p>The actual test case</p>
  
  <pre><code>    package seleniumRC;
  
  //import com.thoughtworks.selenium.*;
  //import org.testng.annotations.*;
  //import static org.testng.Assert.*;
  //import com.thoughtworks.selenium.grid.demo.*;
  //import junit.framework.*;
  //import com.ibm.icu.*;
  //import java.util.regex.Pattern; 
  
  //import static org.testng.AssertJUnit.assertTrue;
  import org.testng.annotations.AfterMethod;
  import org.testng.annotations.BeforeMethod;
  import org.testng.annotations.Parameters;
  
  
  public class Testcase1 extends SeleneseTestNgHelper {
  
   private static int $itter = 10;
  
   public static void main(String args[]) {
    //junit.textui.TestRunner.run(Suite());
   } 
  
  //public static Test Suite() {
   // return new TestSuite(Testcase1.class);
   //}
  
  // public void setUp() throws Exception {
  //  setUp("http://localhost:8080/test", "*firefox");
   //}
   @BeforeMethod(groups = {"default", "example"}, alwaysRun = true)
       @Parameters({"seleniumHost", "seleniumPort", "browser", "webSite"})
       protected void startSession(String seleniumHost, int seleniumPort, String browser, String webSite) throws Exception {
           startSession(seleniumHost, seleniumPort, browser, webSite);
           selenium.setTimeout("120000");
       }
  
  @AfterMethod(groups = {"default", "example"}, alwaysRun = true)
       protected void closeSession() throws Exception {
           closeSession();
       }
  
  
   public void testCase1() throws Exception {
    selenium.open("/login.action#login");
    selenium.type("userName", "foo");
    selenium.type("password", "bar");
    selenium.click("login");
    selenium.waitForPageToLoad("30000");
    selenium.click("link=test");
    Thread.sleep(4000);
    selenium.click("//tr[4]/td[1]/a");
  
    if(selenium.isElementPresent("//input[@id='nextButton']") != false){
    selenium.click("//div[2]/input");
    }
    Thread.sleep(2000);
  
    for(int i=0; i &lt; $itter; i++) {
    if(selenium.isElementPresent("//label") != false){
  
      selenium.click("//label");
      selenium.click("submitButton");
      Thread.sleep(1500);
    }
    else{ Thread.sleep(1500);}
    }
  
     selenium.click("//body/div[2]/div[1]/div/a");
     Thread.sleep(1500);
     selenium.click("//a[contains(text(),'Finish Now')]");
  
  
    Thread.sleep(2000);
    selenium.click("link=View Results");
    Thread.sleep(30000);
    selenium.click("showAllImgCaption");
    Thread.sleep(12000);
    selenium.click("generateTimeButton");
    Thread.sleep(2000);
    selenium.click("link=Logout");
    selenium.waitForPageToLoad("15000");
   }
   }
  </code></pre>
  
  <p>and the SeleneseTestNGHelper class</p>
  
  <pre><code>   package seleniumRC;
  
  import java.lang.reflect.Method;
  //import java.net.BindException;
  
  import com.thoughtworks.selenium.*;
  
  //import org.openqa.selenium.SeleniumTestEnvironment;
  import org.openqa.selenium.WebDriver;
  import org.openqa.selenium.WebDriverBackedSelenium;
  //import org.openqa.selenium.environment.GlobalTestEnvironment;
  import org.openqa.selenium.firefox.FirefoxDriver;
  import org.openqa.selenium.ie.InternetExplorerDriver;
  import org.testng.annotations.AfterMethod;
  import org.testng.annotations.AfterTest;
  import org.testng.annotations.BeforeClass;
  import org.testng.annotations.BeforeMethod;
  import org.testng.annotations.BeforeTest;
  import org.testng.annotations.Optional;
  import org.testng.annotations.Parameters;
  
  public class SeleneseTestNgHelper extends SeleneseTestCase
  {
      private static Selenium staticSelenium;
  
      @BeforeTest
      @Override
      @Parameters({"selenium.url", "selenium.browser"})
      public void setUp(@Optional String url, @Optional String browserString) throws Exception {
          if (browserString == null) browserString = runtimeBrowserString();
  
          WebDriver driver = null;
          if (browserString.contains("firefox") || browserString.contains("chrome")) {
            System.setProperty("webdriver.firefox.development", "true");
            driver = new FirefoxDriver();
          } else if (browserString.contains("ie") || browserString.contains("hta")) {
            driver = new InternetExplorerDriver();
          } else {
            fail("Cannot determine which browser to load: " + browserString);
          }
  
          if (url == null)
            url = "http://localhost:4444/selenium-server";
          selenium = new WebDriverBackedSelenium(driver, url);
  
          staticSelenium = selenium;
      }
  
      @BeforeClass
      @Parameters({"selenium.restartSession"})
      public void getSelenium(@Optional("false") boolean restartSession) {
          selenium = staticSelenium;
          if (restartSession) {
              selenium.stop();
              selenium.start();
          }
      }
  
      @BeforeMethod
      public void setTestContext(Method method) {
          selenium.setContext(method.getDeclaringClass().getSimpleName() + "." + method.getName());
  
      }
  
      @AfterMethod
      @Override
      public void checkForVerificationErrors() {
          super.checkForVerificationErrors();
      }
  
      @AfterMethod(alwaysRun=true)
      public void selectDefaultWindow() {
          if (selenium != null) selenium.selectWindow("null");
      }
  
      @AfterTest(alwaysRun=true)
      @Override
      public void tearDown() throws Exception {
  //        super.tearDown();
      }
  
      //@Override static method of super class (which assumes JUnit conventions)
      public static void assertEquals(Object actual, Object expected) {
          SeleneseTestBase.assertEquals(expected, actual);
      }
  
      //@Override static method of super class (which assumes JUnit conventions)
      public static void assertEquals(String actual, String expected) {
          SeleneseTestBase.assertEquals(expected, actual);
      }
  
      //@Override static method of super class (which assumes JUnit conventions)
      public static void assertEquals(String actual, String[] expected) {
          SeleneseTestBase.assertEquals(expected, actual);
      }
  
      //@Override static method of super class (which assumes JUnit conventions)
      public static void assertEquals(String[] actual, String[] expected) {
          SeleneseTestBase.assertEquals(expected, actual);
      }
  
      //@Override static method of super class (which assumes JUnit conventions)
      public static boolean seleniumEquals(Object actual, Object expected) {
          return SeleneseTestBase.seleniumEquals(expected, actual);
      }
  
      //@Override static method of super class (which assumes JUnit conventions)
      public static boolean seleniumEquals(String actual, String expected) {
          return SeleneseTestBase.seleniumEquals(expected, actual);
      }
  
      @Override
      public void verifyEquals(Object actual, Object expected) {
          super.verifyEquals(expected, actual);
      }
  
      @Override
      public void verifyEquals(String[] actual, String[] expected) {
          super.verifyEquals(expected, actual);
      }
  }
  </code></pre>