Selenium Webdriver(Java)(その1) インストールで躓いたところの備忘録

Webサイトのテスト自動化で使われるSelenium。
ソフトウェアテストを効率的に進めるにはとても便利なものですが、初心者には難易度が高いのも事実。

実際に導入の段階で躓いてしまったので、とりあえず動くようになるまでに躓いたところを手順を追って記録していこうと思います。

実行環境

OS:Windows10 Pro 64bit
CPU:core i3
メモリ:4GB

参考にさせていただいたサイト
https://qiita.com/tsukakei/items/41bc7f3827407f8f37e8

用意したもの

  • ChromeDriver
    https://chromedriver.chromium.org/downloads
    chromeのバージョンが 78.0.3904.108 だったので、「 If you are using Chrome version 78, please download ChromeDriver 78.0.3904.105」のリンクをクリック。
    64bitは用意されていないらしく、chromedriver_win32.zipをダウンロードしました。
    サイトには、更に新しい79が用意されていましたが自分に合ったものを使わないと、chrome起動後にすぐ落ちてしまいます。
  • Google Chrome
    いつも使っているブラウザなので、最新版にアップデートしただけ。
    上にも書いた通り、バージョンは 78.0.3904.108 。
    
  • Firefox
    こちらも普段利用しているブラウザを最新版にアップデートしておく。
  • Selenium Webdriver (Java)
    https://selenium.dev/downloads/
    「Selenium Client & WebDriver Language Bindings」というところから JAVAのDownloadリンクをクリック。( バージョンは 3.141.59 )

環境構築

Eclipseは、Javaがないと動かないので、最初にJavaをインストールします。上記で用意したものはこの後の工程で使います。

次に、Eclipseをインストールして、プロジェクトを作っていきます。

プロジェクトの作成

プロジェクト名はselenium-sample
パッケージ名はsite.lifehacker.sample
にしました。この辺は適当でいいと思います。

プロジェクトの直下にexeフォルダを作成して、 chromedriver_win32.zip の中に入っていたものを配置します。

もう一つ、プロジェクトの直下にlibフォルダを作成して、次のものを配置します。
・ Selenium Webdriver (Java) のlibsフォルダに入っていたjarファイル全て
・ Selenium Webdriver (Java) の直下にあるclient-combined-3.141.59.jar
・JUnitの二つのJarファイル

最終的にはこうなります。

次にパスを通します。

「ビルドパスの構成」から「ライブラリー」タブへ移動して、クラスパスにlibフォルダ内にコピーしたjarファイルすべてを指定します。

間違って「モジュールパス」に追加するとうまく動かないので注意。

src > site.lifehacker.sample (パッケージ名) > SampleTest.javaを作成して、ソースコードを書きます。

こちらのSample testのJavaのところを参考に、というかコピーしました(後に修正あり)。

http://chromedriver.chromium.org/getting-started?tmpl=%2Fsystem%2Fapp%2Ftemplates%2Fprint%2F&showPrintDialog=1

実行

エラーが出ました。
( ※chromeで実行しています。 )

java.lang.IllegalStateException: The driver executable does not exist: C:\path\to\chromedriver
     at com.google.common.base.Preconditions.checkState(Preconditions.java:585)
     at org.openqa.selenium.remote.service.DriverService.checkExecutable(DriverService.java:146)
     at org.openqa.selenium.remote.service.DriverService.findExecutable(DriverService.java:141)
     at org.openqa.selenium.chrome.ChromeDriverService.access$000(ChromeDriverService.java:35)
     at org.openqa.selenium.chrome.ChromeDriverService$Builder.findDefaultExecutable(ChromeDriverService.java:159)
     at org.openqa.selenium.remote.service.DriverService$Builder.build(DriverService.java:355)
     at org.openqa.selenium.chrome.ChromeDriverService.createDefaultService(ChromeDriverService.java:94)
     at org.openqa.selenium.chrome.ChromeDriver.(ChromeDriver.java:123)
     at site.lifehacker.sample.SampleTest.testGoogleSearch(SampleTest.java:14)
     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
     at java.base/java.lang.reflect.Method.invoke(Method.java:567)
     at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
     at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
     at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
     at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
     at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:305)
     at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
     at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:365)
     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
     at org.junit.runners.ParentRunner$4.run(ParentRunner.java:330)
     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:78)
     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:328)
     at org.junit.runners.ParentRunner.access$100(ParentRunner.java:65)
     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:292)
     at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:305)
     at org.junit.runners.ParentRunner.run(ParentRunner.java:412)
     at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89)
     at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463)
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)

ドライバーが見つからないとのこと。

“path\to\chromedriver” は自分のドライバを置いた場所に修正しないといけません。

System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");

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

この行を修正しました。

動作

動かすと、Chromeが立ち上がって、検索窓に “ChromeDriver” を入力して検索実行します。
しばらくするとChromeを閉じる、という動作になります。

ここから自分のやりたいことにカスタマイズしていこうと思います。

Firefoxの場合

Firefoxで動かす場合は、次の2行を修正すれば動きます。

//一つ目の変更点。Firefoxはgeckodriverを使用します。
//System.setProperty("webdriver.chrome.driver", "./exe/chromedriver.exe");
System.setProperty("webdriver.gecko.driver", "./exe/geckodriver.exe");
//二つ目の変更点。
//driver = new ChromeDriver();
driver = new FirefoxDriver();

Originally posted 2019-11-23 12:54:44.

最後に
素敵なブログがたくさん集まる「にほんブログ村」。お気に入りのブログが見つかるかも…

ブログランキング・にほんブログ村へにほんブログ村

コメントを残す

メールアドレスが公開されることはありません。必須項目には印がついています *

CAPTCHA