Selenideオプション一覧

#まえがき
Selenideを利用した自動テストを作成する場合、コーディングせずにSelenideにパラメータを与えておくだけで動作を切り替えられるオプションがあります。
これらを知り、活用することで無駄なコーディングを避けられるので、Selenideをガッツリ利用する場合にはあらかじめ把握したほうが無難です。

実際にオプションを読み込んでいる処理はSelenideConfig.javaにかかれているので、SelenideConfig上のコードとともに見ていきましょう。
ドキュメントの内容と自分が利用してきた経験を踏まえた簡単な説明と個人的な所感も記載しています。
間違ってたらごめんなさい。

#前提
今回の解説はselenideのバージョン5.7ベースに記載しており、公式ドキュメントによる解説は下記ページからも参照が可能です。
https://selenide.org/javadoc/current/com/codeborne/selenide/Configuration.html

#オプション一覧
##selenide.browser
活用度★★★
どのブラウザを利用するか指定できます。
マルチブラウザでのテストを行う際にもコード上でブラウザを指定する必要がなく便利ですね。
chrome", "firefox", "legacy_firefox" (upto ESR 52), "ie", "opera", "edge"のいずれかから選択します。

```java
  private String browser = System.getProperty("selenide.browser", CHROME);
```

##selenide.headless
活用度★
ヘッドレスモードでの実行もできます。
ただ、E2Eテストととしては避けたほうが無難だと思います。スクレイピングで利用が前提でしょうかね。Chrome(59+) and Firefox(56+)のみで動くそうです。

```java
  private boolean headless = Boolean.parseBoolean(System.getProperty("selenide.headless", "false"));
```

##selenide.remote
活用度★
Selenium Gridを利用する場合などRemoteWebDriverを利用する際にはこの設定が必要だそうです。
複数端末でのテストはjenkinsのパイプラインで実現しているので使ったことはないですが。

```java
  private String remote = System.getProperty("selenide.remote");
```

##selenide.browserSize
活用度★★★
ウインドウサイズの指定もできます。
ウインドウサイズを切り替えたテストもあるあるだと思うので、パラメータで変更できるので便利ですね。
保証解像度で動作するか、それよりも高解像度でも動作するか、等。
また、テスト実行端末に依存しない均質なテストを行うためにも重要。

```java
  private String browserSize = System.getProperty("selenide.browserSize", "1366x768");
```

##selenide.browserVersion
活用度★★★
ブラウザのバージョン指定もできるようです。ドキュメントには(for Internet Explorer)と書かれています。

```java
  private String browserVersion = System.getProperty("selenide.browserVersion");
```

##selenide.browserPosition
活用度★
起動時のブラウザポジションも指定できます。あまり用途は思いつかないですが。

```java
  private String browserPosition = System.getProperty("selenide.browserPosition");
```

##selenide.startMaximized
活用度★★
ブラウザ起動時にブラウザサイズを最大化するかどうかを選べます。
最大化しておくと、可視領域が広がって操作対象の要素も表示されやすいのでテストが通りやすくなる傾向はあると思います。
ただ、ブラウザサイズがテストを実行する端末に依存してしまう点はテスト結果の信憑性という点でちょっと微妙ですね。

```java
  private boolean startMaximized = Boolean.parseBoolean(System.getProperty("selenide.startMaximized", "false"));
```

##selenide.driverManagerEnabled
活用度★★
ドライバの自動ダウンロードを行うか否かを切り替えることができます。
基本Onで良いですが、ダウンロード不要としておくと一連のテスト実行時間は短縮できます。
タイトなスケジュールでテスト実行が必要な場合には活用するのもアリだとおもいます
詳細はSee https://github.com/bonigarcia/webdrivermanager for WebDriverManager configuration details.だそうです。

```java
  private boolean driverManagerEnabled = Boolean.parseBoolean(System.getProperty("selenide.driverManagerEnabled", "true"));
```

##selenide.browserBinary
活用度★
使ったことはないですが、ドライバまでのパスを指定できるようです。
ドキュメント上はWorks only for Chrome, Firefox and Opera.と書かれていますが、コードを見るとIEやsafariでも動きそうな気が。

```java
  private String browserBinary = System.getProperty("selenide.browserBinary", "");
```

##selenide.pageLoadStrategy
活用度★★
ページの読み込み完了、をどのように判断するかを指定できます。
`normal`: return after the load event fires on the new page (it's default in Selenium webdriver); 
`eager`: return after DOMContentLoaded fires; 
`none`: return immediately

`normal`の場合はload eventが発火するまで待機するので一番保守的。
これからテストを作成する場合にはDOMの読込完了までは待機してくれる`eager`を選択しておくと安定性と速度が両立できて良いかも。
noneはまったく待機しないので実用的ではないでしょうね。

```java
  private String pageLoadStrategy = System.getProperty("selenide.pageLoadStrategy", "normal");
```

##selenide.baseUrl
活用度★★★
Selenide.open()を利用してページを開くときにここで設定されたURLを開きます。
開発・ステージング等テスト対象となる環境が複数ある場合に活躍します。
通常はホスト、ドメイン、ポートまでを指定します。

```java
  private String baseUrl = System.getProperty("selenide.baseUrl", "http://localhost:8080");
```

##selenide.timeout
活用度★★★
shouldメソッドなどを利用して要素に対するチェックを行う際に待機する時間を指定できます。
テスト対象の環境スペックが低く、レスポンスが悪い場合にはタイムアウト時間を変更することでテストを安定化させることができます。

```java
  private long timeout = Long.parseLong(System.getProperty("selenide.timeout", "4000"));
```

##selenide.pollingInterval
活用度★
あえて指定する必要はないですね。要素のチェックをする際のチェック間隔です。

```java
  private long pollingInterval = Long.parseLong(System.getProperty("selenide.pollingInterval", "200"));
```

##selenide.holdBrowserOpen
活用度★
テストが終わった際にウインドウを開いたままにすることができます。
テスト実行に失敗する際の調査に利用できます。ただ、ウインドウを閉じなければならなくなるので基本的にはキャプチャ取得で代用可能な場合には、このオプションは利用しないほうがベターだと思います。

```java
  private boolean holdBrowserOpen = Boolean.getBoolean("selenide.holdBrowserOpen");
```

##selenide.reopenBrowserOnFail
活用度？
ドキュメントによるとhangs, broken, unexpectedly closedによってブラウザが閉じてしまった時に開きなおすか、というオプションのようですが、開き直してもその後うまく処理進むんですかね。

```java
  private boolean reopenBrowserOnFail = Boolean.parseBoolean(System.getProperty("selenide.reopenBrowserOnFail", "true"));
```
##selenide.clickViaJs
活用度★
要素のクリックをwebdriverが行うか、jsを使って実現するかという選択ができるようです。
ATTENTION! Automatic WebDriver waiting after click isn't working in case of using this feature.
とも書かれているので、理由がなければあえて変更する必要はないと思います。

```java
  private boolean clickViaJs = Boolean.parseBoolean(System.getProperty("selenide.clickViaJs", "false"));
```

##selenide.screenshots
活用度★★★
テスト失敗時にスクショを撮るかどうか。
テスト失敗時のエビデンスとして、またテストコードの問題調査をする場合にはキャプチャが取れると良いので、パラメータでキャプチャ保存要否を切り替えられるのは良いですね。。

```java
  private boolean screenshots = Boolean.parseBoolean(System.getProperty("selenide.screenshots", "true"));
```

##selenide.savePageSource
活用度★★★
実行時のhtmlを取得できるので、こちらもテスト失敗時の調査に役立ちます。

```java
  private boolean savePageSource = Boolean.parseBoolean(System.getProperty("selenide.savePageSource", "true"));
```

##selenide.reportsFolder
活用度★★

```java
  private String reportsFolder = System.getProperty("selenide.reportsFolder", "build/reports/tests");
```

##selenide.savePageSource
活用度★★
ファイルのダウンロード先を指定できます。

```java
  private String downloadsFolder = System.getProperty("selenide.downloadsFolder", "build/downloads");
```

##selenide.reportsUrl
活用度★★
CIと組み合わせて実行するときには便利。
If it's given, names of screenshots are printed as "http://ci.mycompany.com/job/my-job/446/artifact/build/reports/tests/my_test.png" - it's useful to analyze test failures in CI server.
Optional: URL of CI server where reports are published to. In case of Jenkins, it is "BUILD_URL/artifact" by default.

```java
  private String reportsUrl = new CiReportUrl().getReportsUrl(System.getProperty("selenide.reportsUrl"));
```

##selenide.fastSetValue
活用度★★
入力欄への値の入力処理をjavascriptで行うかSeleniumの"sendKey" functionを利用するかを選択できます。
javascriptを利用したほうが入力動作が速いようなので、速度が気になる場合には一考の価値がありです。

```java
  private boolean fastSetValue = Boolean.parseBoolean(System.getProperty("selenide.fastSetValue", "false"));
```

##selenide.versatileSetValue
活用度★
'setValue'、'val'メソッドを実際の要素のタイプに応じて'selectOptionByValue', 'selectRadio'のように動作させられるようです。

```java
  private boolean versatileSetValue = Boolean.parseBoolean(System.getProperty("selenide.versatileSetValue", "false"));
```


##selenide.fileDownload
活用度★
ファイルダウンロードをする際にproxy serverを経由するか設定できます。

```java
  private FileDownloadMode fileDownload = FileDownloadMode.valueOf(System.getProperty("selenide.fileDownload", HTTPGET.name()));
```

##selenide.proxyEnabled
活用度★
proxy serverを経由してブラウザを動作させるか設定できます。

```java
  private boolean proxyEnabled = Boolean.parseBoolean(System.getProperty("selenide.proxyEnabled", "false"));
```

##selenide.proxyHost
活用度★
proxy serverを経由してブラウザを動作させる場合のホストを設定できます。
proxyEnabled == trueとなっていることが前提。

```java
  private String proxyHost = System.getProperty("selenide.proxyHost", "");
```
##selenide.proxyPort
活用度★
proxy serverを経由してブラウザを動作させる場合のポート番号を設定できます。
proxyEnabled == trueとなっていることが前提。

```java
  private int proxyPort = Integer.parseInt(System.getProperty("selenide.proxyPort", "0"));
```

#あとがき
テストに役に立ちそうなオプションは見つかったでしょうか。
ライブラリのバージョンアップによってオプションも随時追加されているようなので、継続的なチェックがおすすめです。