14
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JavaのSeleniumラッパーの異常時挙動比較まとめ

Posted at

JavaのSeleniumとSleniumラッパーの異常時の挙動の比較を行った結果をまとめました。
何かのご参考にどうぞ。
詳細なレポートについてはGitHubにコード結果レポートをアップしてあるので、そちらをご参照ください。

比較対象

環境

  • Mac OS X
  • Chrome 47.0.2526.106
  • ChromeDriver 2.20

比較内容

  • 存在していないinputをクリアする
  • 存在しているが見えないinput(<input hidden>)をクリアする
  • 存在しているが有効でないinput(<input disabled>)をクリアする
  • 存在しているが書き込み不可のinput(<input readonly>)をクリアする
  • 存在していないinputが見えているかのアサーションを行う
  • 存在しているが見えないinputが見えているかのアサーションを行う
  • 存在していないinputが見えていないかのアサーションを行う

コード

クリアする

Selenium

org.openqa.selenium.WebDriver driver;
driver.findElement(By.cssSelector("要素")).clear();

Selenide

com.codeborne.selenide.Selenide.$("要素").clear();

FluentLenium

テストクラスはorg.fluentlenium.adapter.FluentTestを継承しています。

findFirst("要素").clear()

見えているかのアサーションを行う

Selenium

org.openqa.selenium.WebDriver driver;
org.junit.Assert.assertTrue(driver.findElement(By.cssSelector("要素")).isDisplayed());

Selenide

com.codeborne.selenide.Selenide.$("要素").shouldBe(com.codeborne.selenide.Condition.visible);

FluentLenium

テストクラスはorg.fluentlenium.adapter.FluentTestを継承しています。

org.fluentlenium.assertj.FluentLeniumAssertions.assertThat(findFirst("要素")).isDisplayed();

見えていないかのアサーションを行う

Selenium

org.openqa.selenium.WebDriver driver;
org.junit.Assert.assertFalse(driver.findElement(By.cssSelector("要素")).isDisplayed());

Selenide

com.codeborne.selenide.Selenide.$("要素").shouldNotBe(com.codeborne.selenide.Condition.visible);

FluentLenium

テストクラスはorg.fluentlenium.adapter.FluentTestを継承しています。

org.fluentlenium.assertj.FluentLeniumAssertions.assertThat(findFirst("要素")).isNotDisplayed();

結果

存在していないinputをクリアする

Selenium

例外クラス

org.openqa.selenium.NoSuchElementException

例外メッセージ

no such element: Unable to locate element: {"method":"css selector","selector":"存在していないinput"}

Selenide

例外クラス

com.codeborne.selenide.ex.ElementNotFound

例外メッセージ

Element not found {存在していないinput}
Expected: exist
Screenshot: 
Timeout: 1 s.

FluentLenium

例外クラス

org.openqa.selenium.NoSuchElementException

例外メッセージ

Could not find element matching selector: 存在しないinput.

存在しているが見えないinput(<input hidden>)をクリアする

Selenium

例外クラス

org.openqa.selenium.InvalidElementStateException

例外メッセージ

invalid element state: Element is not currently interactable and may not be manipulated

Selenide

例外クラス

com.codeborne.selenide.ex.InvalidStateException

例外メッセージ

org.openqa.selenium.InvalidElementStateException: invalid element state: Element is not currently interactable and may not be manipulated

FluentLenium

例外クラス

org.openqa.selenium.InvalidElementStateException

例外メッセージ

invalid element state: Element is not currently interactable and may not be manipulated

存在しているが有効でないinput(<input disabled>)をクリアする

Selenium

例外クラス

org.openqa.selenium.InvalidElementStateException

例外メッセージ

invalid element state: Element is not currently interactable and may not be manipulated

Selenide

例外クラス

com.codeborne.selenide.ex.InvalidStateException

例外メッセージ

org.openqa.selenium.InvalidStateException: InvalidElementStateException: invalid element state: Element is not currently interactable and may not be manipulated

FluentLenium

例外クラス

org.openqa.selenium.InvalidElementStateException

例外メッセージ

invalid element state: Element is not currently interactable and may not be manipulated

存在しているが書き込み不可のinput(<input readonly>)をクリアする

Selenium

例外クラス

org.openqa.selenium.InvalidElementStateException

例外メッセージ

invalid element state: Element must be user-editable in order to clear it.

Selenide

例外クラス

com.codeborne.selenide.ex.InvalidStateException

例外メッセージ

org.openqa.selenium.InvalidStateException: InvalidElementStateException: invalid element state: Element must be user-editable in order to clear it.

FluentLenium

例外クラス

org.openqa.selenium.InvalidElementStateException

例外メッセージ

invalid element state: Element must be user-editable in order to clear it.

存在していないinputが見えているかのアサーションを行う

Selenium

例外クラス

org.openqa.selenium.NoSuchElementException

例外メッセージ

no such element: Unable to locate element: {"method":"css selector","selector":"存在していないinput"}

Selenide

例外クラス

com.codeborne.selenide.ex.ElementNotFound

例外メッセージ

Element not found {存在しないinput}
Expected: visible
Screenshot: 
Timeout: 1 s.

FluentLenium

例外クラス

org.openqa.selenium.NoSuchElementException

例外メッセージ

Could not find element matching selector: 存在しないinput.

存在しているが見えないinputが見えているかのアサーションを行う

Selenium

例外クラス

java.lang.AssertionError

例外メッセージ

なし

Selenide

例外クラス

com.codeborne.selenide.ex.ElementShould

例外メッセージ

Element should be visible {見えないinput}
Element: '<input type="text" displayed:false></input>'
Screenshot: 
Timeout: 1 s.

FluentLenium

例外クラス

java.lang.AssertionError

例外メッセージ

Object is displayed

存在していないinputが見えていないかのアサーションを行う

Selenium

例外クラス

org.openqa.selenium.NoSuchElementException

例外メッセージ

no such element: Unable to locate element: {"method":"css selector","selector":"存在していないinput"}

Selenide

成功

FluentLenium

例外クラス

org.openqa.selenium.NoSuchElementException

例外メッセージ

Could not find element matching selector: 存在していないinput.

まとめ

Selenide

  • Selenideが異常時に投げる例外はすべて java.lang.Error 系列のSelenideで定義している例外になる。
  • 期待されている状態になるまでのウェイトがある。デフォルト4秒だが、com.codeborne.selenide.Configuration.timeoutで変更可能。Selenideのウリの一つ。
  • 存在しない要素が表示されていないというアサーションは異常扱いされない。Selenideのウリの一つ。
  • 異常時にスクリーンショットとhtmlがデフォルト保存される。com.codeborne.selenide.Configuration.screenshotsで変更可能。保存先もcom.codeborne.selenide.Configuration.reportsFolderで変更可能。Selenideのウリの一つ。

FluentLenium

  • Seleniumと基本変わらないが、要素が見つからない時の例外のメッセージが若干異なる。
  • Selenideと異なり異常時にデフォルトではスクリーンショットを取得しないが、テストクラスのsetSnapshotMode(org.fluentlenium.adapter.FluentTest.Mode mode)TAKE_SNAPSHOT_ON_FAILをセットすることで取得可能。保存先はsetSnapshotPath(String path)で変更可能。
14
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?