Хобрук: Ваш путь к мастерству в программировании

Не удается запустить пример Java для Selenium/WebDriver

Проблема с запуском Selenium на Java. Я пытаюсь следовать примеру на этой странице: http://code.google.com/p/selenium/wiki/GettingStarted

Я печатаю это:

$ javac -cp . -cp ~/Downloads/selenium-2.20.0/selenium-java-2.20.0-srcs.jar -cp ~/Downloads/selenium-2.20.0/selenium-java-2.20.0.jar -g Example.java

И получить это:

alis-mac-pro:selenium ali$ java ExampleException in thread "main" java.lang.NoClassDefFoundError: Example (wrong name: org/openqa/selenium/example/Example)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

Я вставил код из примера в Example.java.

ОБНОВИТЬ


Добрая душа на #java на irc.freenode.net посоветовала мне связать мои записи в пути к классам. Итак, вместо:

$ javac -cp . -cp ~/Downloads/selenium-2.20.0/selenium-java-2.20.0-srcs.jar -cp ~/Downloads/selenium-2.20.0/selenium-java-2.20.0.jar -g Example.java

Я использовал:

javac -cp .:~/Downloads/selenium-2.20.0/selenium-java-2.20.0-srcs.jar:~/Downloads/selenium-2.20.0/selenium-java-2.20.0.jar -g Example.java

Здорово! :-) Но теперь новые ошибки:

Example.java:3: cannot find symbol
symbol  : class By
location: package org.openqa.selenium
import org.openqa.selenium.By;
                          ^
Example.java:4: cannot find symbol
symbol  : class WebDriver
location: package org.openqa.selenium
import org.openqa.selenium.WebDriver;
                          ^
Example.java:5: cannot find symbol
symbol  : class WebElement
location: package org.openqa.selenium
import org.openqa.selenium.WebElement;
                          ^
Example.java:6: package org.openqa.selenium.htmlunit does not exist
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
                                   ^
Example.java:13: cannot find symbol
symbol  : class WebDriver
location: class org.openqa.selenium.example.Example
        WebDriver driver = new HtmlUnitDriver();
        ^
Example.java:13: cannot find symbol
symbol  : class HtmlUnitDriver
location: class org.openqa.selenium.example.Example
        WebDriver driver = new HtmlUnitDriver();
                               ^
Example.java:19: cannot find symbol
symbol  : class WebElement
location: class org.openqa.selenium.example.Example
        WebElement element = driver.findElement(By.name("q"));
        ^
Example.java:19: cannot find symbol
symbol  : variable By
location: class org.openqa.selenium.example.Example
        WebElement element = driver.findElement(By.name("q"));
                                                ^
8 errors

ОБНОВИТЬ


Я старался:

$ jar tf ~/Downloads/selenium-2.20.0/selenium-java-2.20.0.jar 

Но я вижу, например, класс org.openqa.selenium.By, поэтому не похоже, что я пропускаю какие-либо пакеты.

ОБНОВИТЬ


Хорошо! :-) Я удалил спецификатор пакета. я выполнил:

$ javac -classpath ~/Downloads/selenium-2.20.0/selenium-java-2.20.0.jar Example.java

Это то, что мне дал комментатор, за исключением того, что я добавил полный путь к .jar. Затем я выполнил:

$ java -cp .:~/Downloads/selenium-2.20.0/selenium-java-2.20.0.jar Example

Что дало мне:

Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.WebDriver
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

ОБНОВИТЬ


Ура! Победа благодаря Майку Квану. Вот что сработало:

alis-mac-pro:selenium ali$ javac -cp ".:/Users/ali/Downloads/selenium-2.20.0/selenium-java-2.20.0.jar:/Users/ali/Downloads/selenium-2.20.0/selenium-java-2.20.0-srcs.jar:/Users/ali/Downloads/selenium-2.20.0/libs/*" Example.java
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
alis-mac-pro:selenium ali$ java -cp ".:/Users/ali/Downloads/selenium-2.20.0/selenium-java-2.20.0.jar:/Users/ali/Downloads/selenium-2.20.0/selenium-java-2.20.0-srcs.jar:/Users/ali/Downloads/selenium-2.20.0/libs/*" Example
Page title is: Cheese! - Google Search

Кстати, я добавил последнюю часть параметра «-cp» (для «libs/*»), потому что именно там был HTMLUnit, когда я загружал материалы Selenium/WebDriver.

07.04.2012

  • Я думаю, что ваш файл Example.class находится в неправильном каталоге, он должен быть в org.openqa.selenium.example. 07.04.2012

Ответы:


1

Скомпилируйте так:

javac -classpath selenium-server-standalone-2.20.0.jar Example.java

Если вы не поместите файл Java в org.openqa.selenium.example, вам придется удалить спецификатор пакета. Запустите скомпилированный файл следующим образом:

java -cp .:selenium-server-standalone-2.20.0.jar Example

Это связывает текущий каталог с путем к классам.

07.04.2012
  • Спасибо за совет! Я обновил свой вопрос с результатами. 08.04.2012
  • Попробуйте использовать полный путь вместо ~ 08.04.2012
  • Майк, зачем авторам примера кода указывать спецификатор пакета в этом случае? 08.04.2012
  • Потому что это хорошая практика — использовать пакеты. В этом случае с одним исходным файлом это не обязательно. См. docs.oracle.com/javase/tutorial/java/package/packages. .html 08.04.2012

  • 2

    Для тех, кто выполняет динамический веб-проект Java в eclipse и получает указанную выше ошибку, может помочь следующая ссылка:

    http://me-ol-blog.blogspot.co.il/2013/07/using-selenium-in-java-dynamic-web.html

    По сути, в нем упоминается, что автономный jar-файл не является «автономным» при использовании динамических веб-проектов и что вместе с зависимыми от него jar-файлами следует использовать другой jar-файл.

    26.08.2013

    3

    Добавьте зависимость драйвера модуля html в файл pom.

    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>htmlunit-driver</artifactId>
        <version>2.21</version>
    </dependency> 
    

    Это работает нормально для меня.

    09.08.2017
    Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..