質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.40%

  • Java

    14819questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Eclipse

    1792questions

    Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

  • selenium

    590questions

    Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

  • JUnit

    188questions

    JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

Selenium+JAVAの.jarファイルが起動しない

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 9,916

前提・実現したいこと

.jarファイルを起動する

発生している問題・エラーメッセージ

EclipseにSeleniumを導入して、自動化を色々試したのですが、最終的にEclipseで.jarファイルにソースコードをエクスポートして、.jarファイル起動しようとしたところ、起動しませんでした。(Eclipse内では正常な挙動を示しています)

追記(16/08/31,10:28)エラーメッセージを付記

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/W
ebDriver
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.privateGetMethodRecursive(Unknown Source)
at java.lang.Class.getMethod0(Unknown Source)
at java.lang.Class.getMethod(Unknown Source)
at sun.launcher.LauncherHelper.validateMainClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.WebDriver
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)
... 7 more

ソースコード

試したこと

Seleniumのpathが通っていないのではと考えています。

追記(16/08/31,10:28)
ご指摘を受けて、ソースコードを以下の様に変更しました。

public static void Setup() {
System.setProperty("webdriver.chrome.driver", "C:/Users/..(中略)../chromedriver/chromedriver.exe");
}
//尚、修正は、 "./driver/chromedriver.exe" → "C:/Users/..(中略)../chromedriver/chromedriver.exe"です。


C:/Users/..(中略)../chromedriver のファイルには実際にchromedriver.exeが入っていることは確認済みであり、Eclipse内での正常な挙動を確認しています。

補足情報

chromedriverを使用しており、.jarの中身は以下の様な感じです。

com → htmlhifive → sample → HifiveSiteTest.class と HifiveSiteTest.java
driver → chromedriver.exe
lib → apache-mime4j-0.6.jarなどを含む23個のセレニウム関連.jarファイル と CHANGELOG
META-INF → MANIFEST.MF と REFACTORINGS.XML
.classpath
.project

解決策

後に私の様な方が出たときのために一応この質問に伴い学んだことを付記しておきます。

まず、エラーの見方。
コマンドプロンプトから*.jarを実行すると、エラーコードが見られる。(常識なんでしょうか)

>java -jar *.jar
Error (略)

2つ目に*.exeファイルは.jarの外部に置く。今回はchromedriver.exeでした。.java内でのソースコードは以下のようにして、実際にC:/chromedriverのフォルダー内にchromedriver.exeを置きました。

System.setProperty("webdriver.chrome.driver", "C:/chromedriver/chromedriver.exe");

3つ目は、¥Main-ClassをMANIFEST.MF内で設定するということ。「jar にメイン・マニフェスト属性がありません」というエラーが出たときはこの設定がなされていない可能性があるらしいです。

最後は、JUnitテストでは、*.jarファイルにエクスポートしたときに起動しないこと。eclipseにて「右クリック→実行→JUnitテスト」で実行している場合、*.jarファイルにエクスポートしたときにエラーになります。

参考までに、JUnitテストで実行する場合のソースコード(上)と、Javaアプリケーションで実行する場合のソースコード(下)を記しておきます。尚、このソースコードは素人が頑張って作ったものですので、参考程度にしておいて下さい。

//JUnitバージョン

import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class WebTest {

    @BeforeClass
    public static void Setup() {
        System.setProperty("webdriver.chrome.driver", "C:/chromedriver/chromedriver.exe");
    }

    @Test
    public void main() {
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.google.co.jp/");
        driver.quit();
        }
//Javaアプリケーションバージョン
import org.junit.Assert;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;



public class WebTest {

    public static void main(String[] args){
        (new WebTest5()).run();}

    public static void Setup() {
        System.setProperty("webdriver.chrome.driver", "C:/chromedriver/chromedriver.exe");
    }

    public void run() {
        Setup();
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.google.co.jp/");
        driver.quit();
        }
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

おそらく下記のようなエラーが出ていると思います。

Exception in thread "main" java.lang.IllegalStateException: The driver executable does not exist: .\driver\chromedriver.exe
        at com.google.common.base.Preconditions.checkState(Preconditions.java:199)
        at org.openqa.selenium.remote.service.DriverService.checkExecutable(DriverService.java:121)
        at org.openqa.selenium.remote.service.DriverService.findExecutable(DriverService.java:116)
(以下略)

chromedriver.exeはファイルシステム上のディレクトリーにあるファイルを想定しています。
また、Jarファイルの中のexeファイルを直接実行することはできません。

.\driver\chromedriver.exeだけは直接実行しているディレクトリーに置いて実行して下さい。


参考にされていると思われるサイトを貼っておきます。

Selenium WebDriverのインストール~動かしてみる - hifive
https://www.htmlhifive.com/conts/web/view/library/webdriver-howtouse

ちなみに、プロパティー名webdriver.chrome.driverは、このサイトでは文字列を直書きしていますが、定数を使った方が安全で確実です。

import org.openqa.selenium.chrome.*;

System.setProperty(ChromeDriverService.CHROME_DRIVER_EXE_PROPERTY, "./driver/chromedriver.exe");

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/08/31 10:26

    exeファイルは外部なんですね。良く理解せずに使っていました。
    と、分かったところでエラーがまだあるようです。


    Error: A JNI error has occurred, please check your installation and try again
    Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/W
    ebDriver
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
    at java.lang.Class.privateGetMethodRecursive(Unknown Source)
    at java.lang.Class.getMethod0(Unknown Source)
    at java.lang.Class.getMethod(Unknown Source)
    at sun.launcher.LauncherHelper.validateMainClass(Unknown Source)
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
    Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.WebDriver
    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)
    ... 7 more

    ちなみに.javaのソースコード内で、
    public static void Setup() {
    System.setProperty("webdriver.chrome.driver", "C:/Users/..(中略)../chromedriver/chromedriver.exe");
    }
    としています。

    質問も少し修正しておきます。

    キャンセル

  • 2016/08/31 10:33

    Jarファイルの作り方にも問題があるかも知れません。

    私が成功した作り方は、実行可能Jarファイルで作る方法です。ライブラリー格納方式は、抽出ではない方を選びます。
    (今Eclipseを見られないので正確な文言が分からないんです。すみません。)

    キャンセル

  • 2016/08/31 11:09

     「生成されるJARに必須ライブラリーをパッケージ」の項目でしょうか。
     私はそれ以前に実行可能JARファイルから起動構成で、該当のファイルの選択ができない状態です。少し調べて色々試しましたが、「実行可能JARファイル」からのエクスポートができません。

    キャンセル

  • 2016/08/31 11:14

    もしかして、JUnitテストクラスを実行しようとしていませんか?
    その辺は記載していただいてないので、参考にしたと思われるサイトの記載から判断しています。

    Jarで実行できるようにするには、mainから実行しないとダメだと思います。

    キャンセル

  • 2016/08/31 17:08

    解決しました。
    仰るとおりJUnitテストになってました。素早く的確な回答を有難う御座いました。


    解決した内容は質問文に付記させて頂きます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.40%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Java

    14819questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Eclipse

    1792questions

    Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

  • selenium

    590questions

    Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

  • JUnit

    188questions

    JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。