###前提・実現したいこと
.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を置きました。
java
1System.setProperty("webdriver.chrome.driver", "C:/chromedriver/chromedriver.exe");
3つ目は、¥Main-ClassをMANIFEST.MF内で設定するということ。「jar にメイン・マニフェスト属性がありません」というエラーが出たときはこの設定がなされていない可能性があるらしいです。
最後は、JUnitテストでは、.jarファイルにエクスポートしたときに起動しないこと。eclipseにて「右クリック→実行→JUnitテスト」で実行している場合、.jarファイルにエクスポートしたときにエラーになります。
参考までに、JUnitテストで実行する場合のソースコード(上)と、Javaアプリケーションで実行する場合のソースコード(下)を記しておきます。尚、このソースコードは素人が頑張って作ったものですので、参考程度にしておいて下さい。
java
1//JUnitバージョン 2 3import org.junit.Assert; 4import org.junit.BeforeClass; 5import org.junit.Test; 6import org.openqa.selenium.By; 7import org.openqa.selenium.Keys; 8import org.openqa.selenium.WebDriver; 9import org.openqa.selenium.WebElement; 10import org.openqa.selenium.chrome.ChromeDriver; 11public class WebTest { 12 13 @BeforeClass 14 public static void Setup() { 15 System.setProperty("webdriver.chrome.driver", "C:/chromedriver/chromedriver.exe"); 16 } 17 18 @Test 19 public void main() { 20 WebDriver driver = new ChromeDriver(); 21 driver.get("https://www.google.co.jp/"); 22 driver.quit(); 23 }
java
1//Javaアプリケーションバージョン 2import org.junit.Assert; 3import org.openqa.selenium.By; 4import org.openqa.selenium.Keys; 5import org.openqa.selenium.WebDriver; 6import org.openqa.selenium.WebElement; 7import org.openqa.selenium.chrome.ChromeDriver; 8 9 10 11public class WebTest { 12 13 public static void main(String[] args){ 14 (new WebTest5()).run();} 15 16 public static void Setup() { 17 System.setProperty("webdriver.chrome.driver", "C:/chromedriver/chromedriver.exe"); 18 } 19 20 public void run() { 21 Setup(); 22 WebDriver driver = new ChromeDriver(); 23 driver.get("https://www.google.co.jp/"); 24 driver.quit(); 25 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/31 01:26
2016/08/31 01:33
2016/08/31 02:09
2016/08/31 02:14
2016/08/31 08:08