KotlinのSelenideを使用してブラウザを操作する
Selenideとは
Selenideは、Selenium WebDriverを利用したテスト自動化のためのフレームワークです。(公式を翻訳しただけ)
早速書いてみる
プロジェクトの作成
今回はgradleのプロジェクトで作成するので、以下のコマンドでgradleプロジェクトを作成します。
$ gradle init --type=kotlin-application
Google Chromedriverのインストール
chromedriverをインストールします。
$ brew tap homebrew/cask
$ brew cask install chromedriver
正常にインストールされたのかの確認のため、以下のコマンドを実行します。
$ chromedriver --version
実行してみると以下のような画面が表示されます。Googleから取ってきているから、大丈夫なはずなんですけどね・・・
とりあえず「システム環境設定」→「セキュリティとプライバシー」を開きます。一般のタブを選択して「chromedriverは開発元が確認できないため、使用がブロックされました」とあるので、横の「このまま許可」をクリックします。
再度コマンドを実行すると、ダイアログが表示されるので「開く」をクリックします。
すると以下のようにバージョンが表示されるはずです。
$ chromedriver --version ✘ 137
ChromeDriver 81.0.4044.138 (8c6c7ba89cc9453625af54f11fd83179e23450fa-refs/branch-heads/4044@{#999})
gradle ファイルにライブラリの設定を追加
「build.gradle」にselenideのライブラリ情報を追加します。
dependencies {
・・・
implementation("com.codeborne:selenide:5.11.1")
}
実行してみる
「App.kt」を以下のようにして実行してみます。
/*
* This Kotlin source file was generated by the Gradle 'init' task.
*/
package selenide.sample
import com.codeborne.selenide.Configuration
import com.codeborne.selenide.WebDriverRunner
import com.codeborne.selenide.Selenide.*
import org.openqa.selenium.By
import org.openqa.selenium.chrome.ChromeDriver
import org.openqa.selenium.chrome.ChromeOptions
fun main(args: Array<String>) {
Configuration.browser = WebDriverRunner.CHROME
System.setProperty("webdriver.chrome.driver", "/usr/local/bin/chromedriver")
val chromeOptions = ChromeOptions()
# ウィンドウサイズを最大にしたい場合はつける
chromeOptions.addArguments("--start-maximized")
# Dockerで使う場合はつける
chromeOptions.addArguments("--disable-dev-shm-usage")
# ヘッドレスモードで起動する場合はつける
chromeOptions.addArguments("--headless)
val driver = ChromeDriver(chromeOptions)
WebDriverRunner.setWebDriver(driver)
open("https://google.com")
`$`(By.name("q")).setValue("上田晋也").pressEnter()
val ret = `$$`("#res .g")
print(ret.get(0).text())
}
以下のコマンドを実行します。
$ gradle run
ウェブ検索結果
上田晋也 - Wikipedia
ja.wikipedia.org › wiki › 上田晋也
上田 晋也(うえだ しんや、1970年(昭和45年)5月7日 - )は日本のお笑いタレント、司会者、キャスター、俳優。お笑いコンビ・くりぃむしちゅーのツッコミ担当。相方は有田哲平。 熊本県熊本市南区出身。プライムを経て、ナチュラルエイト所属。身長172cm、 ...
最終学歴: 熊本県立済々黌高等学校卒業 コンビ名: くりぃむしちゅー
相方: 有田哲平 事務所: プライム→ナチュラルエイト
上田晋也のサタデージャーナル · 有田哲平 · Category:上田晋也 · サッカー選手
jarファイルを出力して、実行する
jarファイルを出力する
gradle プロジェクトでjarファイルを生成するには以下のコマンドを実行します。
$ gradle build
「build/libs/~.jar」に出力されています。
jarファイルを実行します
コマンドラインで出力したjarファイルを実行します。
$ java -jar ./build/libs/selenide-sample.jar
ウェブ検索結果
上田晋也 - Wikipedia
ja.wikipedia.org › wiki › 上田晋也
上田 晋也(うえだ しんや、1970年(昭和45年)5月7日 - )は日本のお笑いタレント、司会者、キャスター、俳優。お笑いコンビ・くりぃむしちゅーのツッコミ担当。相方は有田哲平。 熊本県熊本市南区出身。プライムを経て、ナチュラルエイト所属。身長172cm、 ...
最終学歴: 熊本県立済々黌高等学校卒業 コンビ名: くりぃむしちゅー
相方: 有田哲平 事務所: プライム→ナチュラルエイト
有田哲平 · 上田啓介 · おしゃれイズム · Category:上田晋也%
先ほど実行した際と同様の結果が表示されます。
エラーが出る場合
Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
at selenide.sample.AppKt.main(App.kt)
Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
Kotlinのライブラリがないようなので、jarを作る際に依存関係に含まれるファイルをコピーするオプションを追加します。
val jar:Jar by tasks.getting(Jar::class) {
from(configurations.compileClasspath.get().map {if (it.isDirectory) it else zipTree(it)})
}
テスト自動化するためのフレームワークでしたが、単純なブラウザ操作にも使用できますね。シンプルに書けるので、やりやすかったです。業務で使用する機会があれば、使いたいなと思います。