Selenium+JAVAの.jarファイルが起動しない
- 評価
- クリップ 0
- VIEW 14K+
前提・実現したいこと
.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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
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");
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.11%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2016/08/31 10:26
と、分かったところでエラーがまだあるようです。
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ファイルで作る方法です。ライブラリー格納方式は、抽出ではない方を選びます。
(今Eclipseを見られないので正確な文言が分からないんです。すみません。)
2016/08/31 11:09
私はそれ以前に実行可能JARファイルから起動構成で、該当のファイルの選択ができない状態です。少し調べて色々試しましたが、「実行可能JARファイル」からのエクスポートができません。
2016/08/31 11:14
その辺は記載していただいてないので、参考にしたと思われるサイトの記載から判断しています。
Jarで実行できるようにするには、mainから実行しないとダメだと思います。
2016/08/31 17:08
仰るとおりJUnitテストになってました。素早く的確な回答を有難う御座いました。
解決した内容は質問文に付記させて頂きます。