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

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

新規登録して質問してみよう
ただいま回答率
85.50%
JAR

JAR(又はJava ARchive)はコンパイルされた複数のJavaバイトコード及び関連ファイルのリソースを一つのファイルに統合したものです。JARファイルはZIPファイルのフォーマットで構築されています。

Java

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

selenium

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

Q&A

解決済

2回答

5518閲覧

文字列からのインスタンス生成で実行時エラーが発生する

SeventhBell

総合スコア14

JAR

JAR(又はJava ARchive)はコンパイルされた複数のJavaバイトコード及び関連ファイルのリソースを一つのファイルに統合したものです。JARファイルはZIPファイルのフォーマットで構築されています。

Java

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

selenium

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

0グッド

0クリップ

投稿2016/05/30 02:52

編集2016/05/30 04:01

【質問】
実行時エラーの対処方法、代替方法。

【求動作】
propertiesファイルにクラス名を記載。

実行時にpropertiesファイルから読み取り、対象をインスタンス化。

(根元にあるやりたい事は、seleniumを利用したブラウザテスト実行時、
対象ブラウザ毎のドライバークラスを設定ファイルで制御する事です)

【エラー内容】
eclipseからの実行時はエラーが発生しません。
jar作成の上、コマンドプロンプトから実行で以下のエラーが発生します。

java.lang.ClassNotFoundException: org.openqa.selenium.ie.InternetExplorerDriver
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)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at jp.captureAutomationPrj.core.App.main(App.java:40)

【環境】
OS:Windows7 64bit
IDE:eclipse4.5

【コメント】
コンパイル周りの問題の場合、当方はコンパイル、ビルドはIDE頼りの為、知識に乏しいです。
この問題の場合、原因に加えIDEでの設定方法をご教授頂けると幸いです。
(もちろん、IDEの方はおまけ程度に考えてくださって結構です)
実行時に対象のjavaファイルへclasspathを通せば出来そう?な気もしますが、なるべく1個のjarにまとめてしまいたいです。

以下、テスト処理クラスとプロパティ管理クラスのソースです。
import周りは基本的にIDEの自動追加の為、省略しますが、
org.openqa.selenium.*のみ全て指定しています。
(ドライバークラスがあるところ)

【ソース-テスト処理クラス-】

public class App { public static void main(String[] args) { try { // プロパティ取得 CaptureProperties cp = CaptureProperties.getInstance(); Properties p = cp.getProperties(); // exePath設定 // ChromeとIEは設定しないとエラーになる if (p.getProperty(CaptureProperties.BROESER).equals("ie") || p.getProperty(CaptureProperties.DRIVER_NAME).equals("chrome")) { File file = new File("resource/" + p.getProperty(CaptureProperties.EXE_NAME) + ".exe"); System.setProperty("webdriver." + p.getProperty(CaptureProperties.BROESER) + ".driver", file.getAbsolutePath()); } // 対象ブラウザのドライバーを設定 Class driverClass = Class.forName(p.getProperty(CaptureProperties.DRIVER_NAME)); WebDriver driver = (WebDriver) driverClass.newInstance(); // Wait設定 driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); // テスト処理 // URLリスト分繰り返す Urls ul = new Urls(); for (URL url : ul.getUrlList()) { // 指定のURLへ接続する driver.get(url.toString()); // 指定の属性を探す(見つからない場合、wait設定値だけ待つ) driver.findElement(By.className("copyright")); // 保存先 File saveAddress = new File(p.getProperty(CaptureProperties.SAVE_ADDRESS)); if (!saveAddress.isDirectory()) { throw new Exception("保存先が存在しません。\n設定ファイルを再確認してください。"); } // ファイル名 String[] str = url.getFile().split("/"); String fileName = str[str.length - 1] + ".png"; // キャプチャ(バッファ→書き出し) BufferedImage image = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize())); ImageIO.write(image, "png", new File(saveAddress, fileName)); } // 終了 driver.quit(); } catch (Exception e) { e.printStackTrace(); } } }

【ソース-プロパティファイル管理クラス-】

public final class CaptureProperties { // プロパティから呼び出す為のキー群 // 保存先 public static final String SAVE_ADDRESS = "saveAddress"; // 対象ブラウザ public static final String BROESER = "browser"; // exe public static final String EXE_NAME = "exeName"; // ドライバー public static final String DRIVER_NAME = "driverName"; // プロパティ private Properties properties = new Properties(); // インスタンス private static final CaptureProperties instance = new CaptureProperties(); private CaptureProperties() { try { load(); } catch (Exception e) { e.printStackTrace(); } } /** * インスタンス取得 * @return CaptureProperties */ public static CaptureProperties getInstance() { return CaptureProperties.instance; } // 設定ファイルのロード public void load() throws Exception { properties.clear(); // プロパティファイルの場所 File file = new File("config/application.properties"); // ファイルの存在確認 if (!file.isFile()) { // ファイルが存在しない場合は処理終了 throw new FileNotFoundException(file.getAbsolutePath()); } try (InputStreamReader in = new InputStreamReader(new FileInputStream(file), "utf-8")) { properties.load(in); } } /** * プロパティ取得 * @return Properties */ public Properties getProperties() { return properties; } }

【propertiesファイル】

#保存先 saveAddress = #ブラウザ ie || chrome 以外は設定不要 browser = ie #browser = chrome #エクゼ IEDriverServer || chromedriver 以外は設定不要 exeName = IEDriverServer #exeName = chromedriver #ドライバー 使いたいブラウザのドライバーを設定 driverName = org.openqa.selenium.ie.InternetExplorerDriver #driverName = org.openqa.selenium.chrome.ChromeDriver; #driverName = org.openqa.selenium.firefox.FirefoxDriver

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

eclipseの機能からエクスポート>jarファイルではなく、エクスポート>実行可能jarファイルにするとうまくいきました。
この違いがよくわかっていないので、勉強してきます。
ありがとうございました。

投稿2016/05/30 05:12

SeventhBell

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

エラーメッセージは、InternetExplorerDriverクラスが見つからないと言っていますね。

SeleniumはFirefoxを使用する場合は特別な設定なく動かせますが、ChromeとIEを動かす場合は他に設定が必要です。
以下の記事を参考にしてみてください。
http://qiita.com/takky/items/9a2c1dc36c1a729c56cb

投稿2016/05/30 03:43

yohira0616

総合スコア255

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SeventhBell

2016/05/30 03:55

回答ありがとうございます。 今回の場合IEですが、IE向けにexeファイルのパスとIEの保護設定の統一は設定済みです。 これらの設定をしない場合、IDE上での実行も失敗しますが、今回IDE上では成功している為、selenium利用の為のブラウザ別設定の問題じゃないと考えています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問