0

I'm new with running Java from the command line in Windows and can't get my program to run. To overview, here is exactly what I am trying to do:

Run two .java files, TestCase1.java and UniversalVariables.java
Incorporate multiple external jar files
Do all of this from the command line

TestCase1.java has all of the functioning code, whereas UniversalVariables.java pretty much just has some data, so don't let all that's in there confuse you.

It should be noted that I am using Selenium and running it through Eclipse.

Here is TestCase1.java:

package NSSR;

import com.thoughtworks.selenium.*;<br>
import org.junit.After;<br>
import org.junit.Before;<br>
import org.junit.Test;<br>

//Create new NSSR

public class TestCase1 extends SeleneseTestCase {

    public static void main(String[] args) {
        TestCase1 tc1 = new TestCase1();
        try {
            tc1.setUp();
            tc1.testTestCase1();
            tc1.tearDown();
        } catch (Exception e) {

        }
    }

    @Before
    public void setUp() throws Exception {
        selenium = new DefaultSelenium("localhost", 4444, "*firefox",
                UniversalVariables.baseAddress);
        selenium.start();
    }

    @Test
    public void testTestCase1() throws Exception {
        selenium.open(UniversalVariables.loginPage);
        selenium.type("name=USERNAME", UniversalVariables.username);
        selenium.type("name=PASSWORD", UniversalVariables.password);
        selenium.click("link=Submit");
        selenium.waitForPageToLoad("60000");
        selenium.open("/itg/dashboard/app/portal/PageView.jsp?IS_WINDOID=N");
        selenium.click("link=Create");
        selenium.click("link=Request");
        selenium.waitForPageToLoad("30000");
        selenium.select("name=REQUEST_TYPE_CREATE",
                "label=Non-Standard Service");
        selenium.click("css=span.secBtn > a");
        selenium.waitForPageToLoad("30000");
        String title = UniversalVariables.getRandomTitle();
        String req = UniversalVariables.Requestor;
        String dept = UniversalVariables.reqDept;
        String desc = UniversalVariables.getRandomDescription();
        String date = UniversalVariables.getRandomDate();
        System.out.println(title);
        System.out.println(req);
        System.out.println(dept);
        System.out.println(desc);
        System.out.println(date);
        selenium.type("id=REQ.DESCRIPTION", title);
        selenium.type("id=REQ.P.REQUESTORAC_TF", req);
        selenium.select("id=REQ.P.REQUESTOR_DEPT", dept);
        selenium.type("id=REQ.P.DETAIL_DESC", desc);
        selenium.type("REQ.P.REQ_COMPL_DATE", date);
        selenium.click("link=Submit");
        selenium.waitForPageToLoad("30000");
        selenium.refresh();
    }

    @After
    public void tearDown() throws Exception {
        selenium.stop();
    }
}

And here is UniversalVariables.java:

package NSSR;

import java.util.*;

public class UniversalVariables {

    public static String baseAddress = "******";
    public static String loginPage = "******";
    public static String username = "******";
    public static String password = "******";
    public static ArrayList<String> NSSR_Titles = new ArrayList<String>(NSSR_Titles());
    public static String Requestor = "******";
    public static String reqDept = "Shared Services";
    public static ArrayList<String> NSSR_Descriptions = new ArrayList<String>(NSSR_Descriptions());
    public static ArrayList<String> NSSR_Dates = new ArrayList<String>(NSSR_Dates());
    public static Random randy = new Random();
    public static int num;

    public static String getRandomTitle() {
        num = randy.nextInt(NSSR_Titles.size());
        return NSSR_Titles.get(num);
    }

    public static String getRandomDescription() {
        num = randy.nextInt(NSSR_Descriptions.size());
        return NSSR_Descriptions.get(num);
    }

    public static String getRandomDate() {
        num = randy.nextInt(NSSR_Dates.size());
        return NSSR_Dates.get(num);
    }

    public static ArrayList<String> NSSR_Titles() {
        ArrayList<String> list = new ArrayList<String>();
        for(int i = 1; i < 11; i++)
            list.add("Title " + i);
        return list;
    }

    public static ArrayList<String> NSSR_Descriptions() {
        ArrayList<String> list = new ArrayList<String>();
        for(int i = 1; i < 11; i++)
            list.add("Description " + i);
        return list;
    }

    public static ArrayList<String> NSSR_Dates() {
        ArrayList<String> list = new ArrayList<String>();
        for(int i = 1; i < 13; i++)
            for(int j = 1; j < 29; j++)
                for(int k = 13; k < 100; k++) {
                    String str = i + "/" + j + "/20" + k;
                    list.add(str);
                }
        return list;
    }
}

This is what I put into the command line (These are all of the jar files I use. I know it's not pretty...bear with me.):

>javac -classpath C:\JAR\junit-4.0.jar;C:\JAR\junit-4.0-src.jar;C:\JAR\selenium-java-c
lient-driver.jar;C:\JAR\selenium-java-client-driver-sources.jar;C:\JAR\selenium-
java-client-driver-tests.jar;C:\JAR\selenium-java-client-driver-test-sources.jar
;C:\JAR\selenium-server.jar;C:\JAR\selenium-server-coreless.jar;C:\JAR\selenium-
server-sources.jar;C:\JAR\selenium-server-standalone-2.24.1.jar; NSSR\TestCase1.
java NSSR\UniversalVariables.java

That compiles just fine. I then put this into the command line:

>java NSSR.TestCase1

Then comes the error:

Exception in thread "main" java.lang.NoClassDefFoundError: com/thoughtworks/sele
nium/SeleneseTestCase
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(Unknown Source)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$000(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Caused by: java.lang.ClassNotFoundException: com.thoughtworks.selenium.SeleneseT
estCase
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 12 more
Could not find the main class: NSSR.TestCase1.  Program will exit.

FYI, this is my CLASSPATH:

.;C:\Program Files\Java\jre6\lib\ext\QTJava.zip;C:\WINDOWS\system32\java.exe\lib;C:\Program Files\IBM\RationalSDLC\ClearQuest\cqjni.jar;C:\JAR*.jar

Any help is greatly appreciated!

jrad
  • 3,172
  • 3
  • 22
  • 24

2 Answers2

3

You need to put the jars as a parameter to java as well, same as you passed for javac.

Garbage
  • 1,490
  • 11
  • 23
1
java -classpath "C:\JAR\junit-4.0.jar;C:\JAR\junit-4.0-src.jar;C:\JAR\selenium-java-client-driver.jar;C:\JAR\selenium-java-client-driver-sources.jar;C:\JAR\selenium-java-client-driver-tests.jar;C:\JAR\selenium-java-client-driver-test-sources.jar;C:\JAR\selenium-server.jar;C\JAR\selenium-server-coreless.jar;C:\JAR\selenium-server-sources.jar;C:\JAR\selenium-server-standalone-2.24.1.jar" NSSR.TestCase1

should do what you want. java also needs to know where to find the libraries. It is not stored in the referencing class files (and should not, as it would only fit your own system)

zpea
  • 1,072
  • 6
  • 23
  • Looks like Garbage beat you to the punch. Thanks though! – jrad Jul 09 '12 at 15:35
  • In any case I might add that you barely need any of the libs you included in the classpath. Moreover, before your test base grows consider using WebDriver (aka Selenium 2) instead of the old Selenium 1. The code export option in Selenium IDE is called "Junit (WebDriver)", just in case you wondered. The code uses a lot less explicit waiting and WebDriver is officially supported by all the big browser manufacturers. – zpea Jul 09 '12 at 15:43
  • @JackRadcliffe: Oh, and you don't need to run the selenium server from Eclipse as you mentioned. A simple `java -jar C:\JAR\selenium-server-standalone-2.24.1.jar` does the job pretty well :) – zpea Jul 09 '12 at 15:46
  • I'll look into it for sure. However, that depends heavily on what my employer thinks ;) Either way, thanks for the suggestion! – jrad Jul 09 '12 at 15:48