2016-07-13 7 views
0

Hier ist meine Klasse. Ich verwende Selenium Chrome WebDriver, um Aktionen auf einer Website zu automatisieren. Mein Problem ist, dass ich einen NoClassDefFoundError bekomme, aber das kann nicht möglich sein, da ich alle erforderlichen .jars-Dateien in meinem Build-Pfad aufgenommen habe. Was ist los?NoClassDefFoundError mit Selenium Chrome WebDriver

public class TwitterAutoBot { 
    private WebDriver driver; 
    private String baseUrl; 
    private StringBuffer verificationErrors = new StringBuffer(); 

    @Before 
    public void setUp() throws Exception { 

     // Google Chrome 
     File file = new File("C:\\Users\\User\\plugins\\TwitterAutoBot\\src\\chromedriver.exe"); 
     System.setProperty("webdriver.chrome.driver", file.getAbsolutePath()); 
     driver = new ChromeDriver(); 

     // Firefox 
     // driver = new FirefoxDriver(); 

     baseUrl = "https://www.twitter.com"; 
     driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
    } 

    @Test 
    public void testValidation() throws Exception { 

     // Authentication information 
     String username = "asdfasdfasdf"; 
     String password = "asdf123!"; 

     // Open site 
     launchActivity("/"); 

     // Maximize window 
     maximizeWindow(); 

     // Enter authentication information 
     sendKeysAndWait("signin-email", username); 
     sendKeysAndWait("signin-password", password); 

     // Log in 
     clickButtonAndWait("//button[@type='submit']"); 

     // Send 40 messages per hour for a total of 960 per day 
     for (int i = 1; i < 960; i++) { 
      sendMessageAndWait(); 
     } 

     System.out.println("All messages have been sent."); 

    } 

     public void sendMessageAndWait() throws Exception { 
     driver.findElement(By.id("tweet-box-home-timeline")).click(); 
     driver.findElement(By.xpath("(//button[@type='button'])[17]")).click(); 
     driver.findElement(By.id("global-new-tweet-button")).click(); 
     driver.findElement(By.xpath("(//button[@type='button'])[644]")).click(); 
     System.out.println("Message sent."); 
     sleep(); 
     } 

    private void maximizeWindow() throws InterruptedException { 
     driver.manage().window().maximize(); 
     sleep(); 
    } 

    /** 
    * 
    * @param extension The remainder of the URL, after baseUrl 
    */ 
    private void launchActivity(String extension) { 
     driver.get(baseUrl + extension); 
    } 

    /**s 
    * Writes a string to an HTML element and waits a random time 
    * @param elem The element to send the keys 
    * @param keys The string to write to the element 
    * @throws InterruptedException 
    */ 
    private void sendKeysAndWait(String elem, String keys) throws InterruptedException { 
     Math.random(); 
     driver.findElement(By.id(elem)).clear(); 
     driver.findElement(By.id(elem)).sendKeys(keys); 
     sleep(); 
    } 

    /** 
    * 
    * @param id The id of the button found in HTML 
    * @throws InterruptedException 
    */ 
    private void clickButtonAndWait(String id) throws InterruptedException { 
     driver.findElement(By.id(id)).click(); 
     sleep(); 
    } 


    private void sleep() throws InterruptedException { 
     int randomWaitDuration = 75000 + (int)(Math.random() * 105000); ; 
     Thread.sleep(randomWaitDuration); 
     System.out.println(randomWaitDuration + " minutes since your last tweet."); 
    } 

    @After 
    public void tearDown() throws Exception { 
     driver.quit(); 
     String verificationErrorString = verificationErrors.toString(); 
     if (!"".equals(verificationErrorString)) { 
      fail(verificationErrorString); 
     } 
    } 
} 

bekomme ich folgende NoClassDefFoundError:

java.lang.NoClassDefFoundError: org/openqa/selenium/remote/RenderedRemoteWebElement 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) 
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at TwitterAutoBot.setUp(TwitterAutoBot.java:33) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27) 
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.remote.RenderedRemoteWebElement 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 37 more 

java.lang.NullPointerException 
    at TwitterAutoBot.tearDown(TwitterAutoBot.java:126) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) 
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:36) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 

Java-Module:

junit-4.10.jar 
selenium-chrome-driver-2.0a4.jar 
selenium-java-2.53.0-srcs.jar 
selenium-java-2.53.0.jar 
selenium-server-standalone-2.53.0.jar 
+1

können Sie uns bitte zeigen, was Java Module, die Sie importiert haben? –

+0

Ich habe meinen Post bearbeitet, um die .jar-Dateien in meinem lib-Ordner anzuzeigen. – santafebound

Antwort

1

Scheint ein Glas nicht verfügbar Thema. Bitte laden Sie die jar Datei "selen-remote-client-2.0a5.jar" herunter und fügen Sie sie Ihrem Klassenpfad hinzu.

Jar ist in

Jar file