Selenium脚本在eclipse中运行但不是jar

时间:2015-09-02 09:06:23

标签: java eclipse selenium

我已经编写了这个selenium脚本,它在eclipse中运行良好但在我将其打包为jar时不运行。 代码就像

     package rcm.Selenium.Test;
    import java.text.*;
    import java.util.*;
    public class Calculations 
    {   private Long difference;
    public Long timeDifference(String weboutput)
    {   try 
        {       Calendar calendar = GregorianCalendar.getInstance(); 
                Calendar today = new GregorianCalendar();               
                Date inputTime;
                if (weboutput.length() <= 11)
                {   // for data fetched for current date.
                    DateFormat formatter = new SimpleDateFormat("hh:mm:ss a", Locale.US);
                    inputTime = formatter.parse(weboutput);
                    calendar.setTime(inputTime);
                    int hour = calendar.get(Calendar.HOUR);
                    int minute = calendar.get(Calendar.MINUTE);
                    int second = calendar.get(Calendar.SECOND);
                    today.setTime(new Date());
                    today.set(Calendar.HOUR, hour);
                    today.set(Calendar.MINUTE, minute);
                    today.set(Calendar.SECOND, second);
                }
                else 
                {   if (weboutput.length() <= 15)
                    {   // for data for earlier date in same year or month.
                        DateFormat formatter = new SimpleDateFormat("MMM dd hh:mm a" , Locale.US);
                        inputTime = formatter.parse(weboutput);
                        calendar.setTime(inputTime);
                        int hour = calendar.get(Calendar.HOUR);
                        int minute = calendar.get(Calendar.MINUTE);
                        int month = calendar.get(Calendar.MONTH);
                        int date = calendar.get(Calendar.DATE);
                        today.setTime(new Date());
                        today.set(Calendar.HOUR, hour);
                        today.set(Calendar.MINUTE, minute);
                        today.set(Calendar.MONTH, month);
                        today.set(Calendar.DATE, date);
                    }
                    else
                    {   // for data with different year.
                        DateFormat formatter = new SimpleDateFormat("MMM dd, yyyy hh:mm:ss a" , Locale.US);
                        inputTime = formatter.parse(weboutput);
                        calendar.setTime(inputTime);
                        int hour = calendar.get(Calendar.HOUR);
                        int minute = calendar.get(Calendar.MINUTE);
                        int second = calendar.get(Calendar.SECOND);
                        int month = calendar.get(Calendar.MONTH);
                        int date = calendar.get(Calendar.DATE);
                        int year = calendar.get(Calendar.YEAR);
                        today.setTime(new Date());
                        today.set(Calendar.HOUR, hour);
                        today.set(Calendar.MINUTE, minute);
                        today.set(Calendar.SECOND, second);
                        today.set(Calendar.YEAR, year);
                        today.set(Calendar.MONTH, month);
                        today.set(Calendar.DATE, date);                 
                    }
                }               
                Date retrivedDate = today.getTime();
                Calendar cal = Calendar.getInstance();
                Date currentDate = cal.getTime();
                difference = currentDate.getTime() - retrivedDate.getTime(); 
                System.out.println(retrivedDate);
                System.out.println(currentDate);
                System.out.println(difference); 

        } 
        catch (ParseException e) 
        {       e.printStackTrace();
        }
        return difference; 
    }
    public boolean alarmValue(Long alarmTime)
    {   if (alarmTime <= 1800000 )  // change this value for Alarm duration, currently 30 min = 30* 60 s = 1800 * 1000 ms = 1800000 ms.
            return false;
        else
            return true;        
    }
     }

And the main class is :




         package rcm.Selenium.Test;
        import java.io.File;
     import java.util.concurrent.TimeUnit;
     import org.openqa.selenium.By;
     import org.openqa.selenium.WebDriver;
     import org.openqa.selenium.ie.InternetExplorerDriver;
         public class RcmSeleniumTest 
     {  public static boolean alarm;
        public static int myInt;
        public static void main(String[] args) 
        {   //Specify location of IE driver here, below is my IE driver location. 
            File file = new File("resources\\IEDriverServer.exe");
        System.setProperty("webdriver.ie.driver", file.getAbsolutePath());

        // Create a new instance of the ie driver.
        WebDriver driver = new InternetExplorerDriver();
        try 
        {   // Navigate to URL, Specify RCM URL here.
            driver.get("URL HERE");

            // Maximize the window.
            driver.manage().window().maximize();

            // To be used in lower environments with no single signon.
                TimeUnit.SECONDS.sleep(5);
                /*driver.findElement(By.id("loginForm:workspace_login_user_name")).clear();
                driver.findElement(By.id("loginForm:workspace_login_user_name")).sendKeys("*****");
                driver.findElement(By.id("loginForm:workspace_login_password")).clear();
                driver.findElement(By.id("loginForm:workspace_login_password")).sendKeys("******");
                driver.findElement(By.id("loginForm:submitbutton")).click();*/

            //Wait to let workspace open properly
            TimeUnit.SECONDS.sleep(10);
            System.out.println("Sorting");

            // First click on creation time.
            driver.findElement(By.id("portletComponentWorkList_viewNormalModeWorkList_viewPanel_instanceListTableWorkList_Header10")).click();
            // wait for click change to reflect.
            System.out.println("First click on Creation Time");
            TimeUnit.SECONDS.sleep(10);



            // Second Click on creation time, for required sorting.
            driver.findElement(By.id("portletComponentWorkList_viewNormalModeWorkList_viewPanel_instanceListTableWorkList_Header10")).click();
            System.out.println("Second Click on Creation Time");
            //wait for click change to reflect.
            TimeUnit.SECONDS.sleep(10);         

            System.out.println("Sorting Done"); 
            //driver.findElement(By.xpath("//table[@id='portletComponentWorkList_viewNormalModeWorkList_viewPanel_instanceListTableWorkList']/tbody/tr/td[11]")).click();
            //TimeUnit.SECONDS.sleep(5);
            //System.out.println("First Value Selected");

            // Get the time from RCM Workspace.
            String creationTime = driver.findElement(By.xpath("//table[@id='portletComponentWorkList_viewNormalModeWorkList_viewPanel_instanceListTableWorkList']/tbody/tr/td[11]")).getText();
            TimeUnit.SECONDS.sleep(3);
            System.out.println(creationTime);

            // Logout is must
            driver.findElement(By.id("_id9_signOutLinkLink")).click();  
            System.out.println("RCM User Logged Out");

            // Close the web page.
            driver.close(); 
            System.out.println("RCM Web Page Closed");


            // Calculate time difference and check alarm.
            System.out.println("Calculating the time difference");
            Calculations calOb = new Calculations();
            Long alarmTime = calOb.timeDifference(creationTime);
            alarm = calOb.alarmValue(alarmTime);
            myInt = (alarm) ? 1 : 0;
            System.out.println("alarm is :" + myInt);
        }
        catch (InterruptedException e1) 
        {   e1.printStackTrace();
            driver.close();
        }
    }
     }

当我通过jar文件运行此操作时出现以下错误

C:\Users\pna105\terminal test rcm>java -cp .:selenium-server-standalone-2.20.0.j
ar -Xmx1024M -jar RCMSELENIUM.jar -o true
Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/W
ebDriver
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Class.java:2570)
        at java.lang.Class.getMethod0(Class.java:2813)
        at java.lang.Class.getMethod(Class.java:1663)
        at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)

Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.WebDriver
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        ... 6 more

我不确定为什么它不是以jar运行,在此之前它有谷歌代码错误已修复,包括来自谷歌代码项目的guava.jar文件

1 个答案:

答案 0 :(得分:0)

在通过终端运行时遇到以下问题,但现在它正常工作,请注意参考。

Encoding error : add "-encoding utf-8" while compiling the code.
classpath error : add (-cp "your jar folder"\*)though it is found in many places that wild card doesn't work, but it worked in my case.
no class def found error while running code : include "your jar folder" which now contains all class files needed in your classpath in java command or make one classpath entry for this.

解决这个问题已经解决了,如果有任何疑问,请告诉我。