Webサイトのテスト自動化で使われるSelenium。
ソフトウェアテストを効率的に進めるにはとても便利なものですが、初心者には難易度が高いのも事実。
実際に導入の段階で躓いてしまったので、とりあえず動くようになるまでに躓いたところを手順を追って記録していこうと思います。
実行環境
OS:Windows10 Pro 64bit
CPU:core i3
メモリ:4GB
参考にさせていただいたサイト
https://qiita.com/tsukakei/items/41bc7f3827407f8f37e8
用意したもの
- Java
https://www.oracle.com/technetwork/java/javase/downloads/index.html
Java SE 13.0.1のリンクをクリックした先の
jdk-13.0.1_windows-x64_bin.exeをダウンロードして実行
- Eclipse ( Eclipse 2019-09 )
https://www.eclipse.org/downloads/
- 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 。
- (GeckoDriver)(Firefoxを使うとき)
https://github.com/mozilla/geckodriver/releases
assetsの中にある、geckodriver-v*.**.*-win64.zipをダウンロード
- Firefox
こちらも普段利用しているブラウザを最新版にアップデートしておく。
- Selenium Webdriver (Java)
https://selenium.dev/downloads/
「Selenium Client & WebDriver Language Bindings」というところから JAVAのDownloadリンクをクリック。( バージョンは 3.141.59 )
- JUnit
https://github.com/junit-team/junit4/wiki/Download-and-Install
junit.jar と、hamcrest-core.jar をどちらもダウンロード。
環境構築
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のところを参考に、というかコピーしました(後に修正あり)。
実行
エラーが出ました。
( ※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.