ちなみに 「何言ってんだコイツ?(・д・`)」と感じられたら, こちらの本家へジャンプ.
またこちらでメソッドの中身を見るのもいいかも.
Wait.until()の指定できる「状態」
1. 準備
・インポートと宣言
逆にこの最大待機時間内に conditionが整えば, わざわざ最大待機時間まで待機せずに先に進んでくれる.
import org.openqa.selenium.support.ui.Wait; import static org.openqa.selenium.support.ui.ExpectedConditions.*; WebDriver driver = new ChromeDriver(); Wait<webdriver> wait = new WebDriverWait(driver, 10);まずは準備. newする際に, 待機を指示する WebDriverの指定と, 最大待機時間を宣言. 今回は 10秒を指定. もちろん 10を 20に置き換えれば最大 20秒待機となる. この待機時間を過ぎると,
org.openqa.selenium.TimeoutExceptionが発生し, テストはそこで failとなる.
逆にこの最大待機時間内に conditionが整えば, わざわざ最大待機時間まで待機せずに先に進んでくれる.
Thread.sleep(10000);とかするよりよっぽどスマート.
・until
たとえば titlesで状態を設定したいなら,
使い方自体はシンプルなのだが, 問題はこの「期待する状態の設定」の方になる.
wait.until(ExpectedCondition condition);wait.until()を呼び出す. この引数に以下に紹介する conditionを設定して渡してやればOK.
たとえば titlesで状態を設定したいなら,
wait.until(titles("期待するタイトル"));としてやる.
使い方自体はシンプルなのだが, 問題はこの「期待する状態の設定」の方になる.
2. conditionの設定
・titles
public static ExpectedCondition<java.lang.Boolean> titleIs(java.lang.String title)「ページのタイトルが titleに一致するまで」待機.
・titleContains
public static ExpectedCondition<java.lang.Boolean> titleContains(java.lang.String title)「ページのタイトルに titleが含まれるまで」待機.
・presenceOfElementLocated
public static ExpectedCondition<WebElement> presenceOfElementLocated(By locator)「引数に指定した locatorがDOMに現れるまで」待機. ただし待機終了時に, 必ずしもそれが画面に表示されているとは限らない.
・visibilityOfElementLocated
public static ExpectedCondition<WebElement> visibilityOfElementLocated(By locator)↑に近く, 「引数に指定した locatorがDOMに現れるまで」待機.こちらは画面に表示されたうえで, それが0より大きい幅高さを持って存在している状態になるまで待機する.
・visibilityOf
public static ExpectedCondition<WebElement> visibilityOf(WebElement element)visibilityOfElementLocatedに近いが, こちらは「引数に指定した elementがDOMに現れるまで」待機. ”画面に表示される”の定義も visibilityOfElementLocatedと同じ.
・presenceOfAllElementsLocatedBy
public static ExpectedCondition<java.util.List<WebElement>> presenceOfAllElementsLocatedBy(By locator)「引数に指定した locatorが, ページ上に少なくとも一つ存在するまで」待機. 見えるかどうかは問わないらしい.
・textToBePresentInElement
public static ExpectedCondition<java.lang.Boolean> textToBePresentInElement(By locator, java.lang.String text)「引数に指定した textが, 指定した locatorに textとして現れるまで」待機. 要するに指定した locatorでgetText()したら textがとれるようになるまで待機?
・textToBePresentInElementValue
public static ExpectedCondition<java.lang.Boolean> textToBePresentInElementValue(By locator, java.lang.String text)↑に近いが, こちらは「引数に指定した textが, 指定した locatorの valueとして現れるまで」待機.
・frameToBeAvailableAndSwitchToIt
public static ExpectedCondition<WebDriver> frameToBeAvailableAndSwitchToIt(java.lang.String frameLocator)「指定した frameLocatorに WebDriverが移動するまで」待機?そもそもframeがよくわかってないし, ここを見た分には, このメソッドでそのまま移動しそうな switchTo()が呼ばれてるけどどういうことなんだろう…
・invisibilityOfElementLocated
public static ExpectedCondition<java.lang.Boolean> invisibilityOfElementLocated(By locator)今度は「引数に指定した locatorが, 見えなくなるかDOM上からいなくなるまで」待機. "見えなくなる"の定義はないのかな…(・ω・`)
・invisibilityOfElementWithText
public static ExpectedCondition<java.lang.Boolean> invisibilityOfElementWithText(By locator, java.lang.String text)「 textで指定した要素が, locatorで指定したエレメントから, 見えなくなるかDOM上からいなくなるまで」待機, …でいいのかな.
・elementToBeClickable
public static ExpectedCondition<WebElement> elementToBeClickable(By locator)「 locatorで指定したエレメントが, 画面上に表示され, かつクリックできる状態になる」まで待機.
・stalenessOf
public static ExpectedCondition<java.lang.Boolean> stalenessOf(WebElement element)「 elementがDOMに付属しなくなるまで」待機. ページのリロードなどでDOMが置き換わるなどするときに, "指定した elementがDOMからちゃんと消えるまで"待つ, ってこと? 参考
・refreshed
public static <T> ExpectedCondition<T> refreshed(ExpectedCondition<T> condition)このメソッド…無くなってる…?まぁ正直どういう動きか微妙に想像つかないけど(・ω・`)
・elementToBeSelected
public static ExpectedCondition<java.lang.Boolean> elementToBeSelected(WebElement element)「指定した elementが選択された状態になるまで」待機. チェックボックスとかに使うんだろうけど, どこで判断してるんだろう…
・elementSelectionStateToBe
public static ExpectedCondition<java.lang.Boolean> elementSelectionStateToBe(WebElement element, boolean selected)ほぼ↑と同じ気が…. 「指定した elementが selectedで指定した状態に選択 された/されていない 状態になるまで」待機. こっちで統一してもいい気がする…. 説明文とかコピペを疑うし…
・elementToBeSelected
public static ExpectedCondition<java.lang.Boolean> elementToBeSelected(By locator)↑の locator版?「 locatorで指定したエレメントが選択された状態になるまで」待機, 当たりか. 説明すら放棄されましたorz
・elementSelectionStateToBe
public static ExpectedCondition<java.lang.Boolean> elementSelectionStateToBe(By locator, boolean selected)「 locatorで指定したエレメントの選択状態が, selectedで指定した状態になるまで」待機, でいいのかな? もはや説明不要といわんばかりの勢い
・alertIsPresent
public static ExpectedCondition<Alert> alertIsPresent()おそらく「アラートが出るまで」待機. 見たまんまでも説明がないと不安になりますよ…('A`)
・not
public static ExpectedCondition<java.lang.Boolean> not(ExpectedCondition<?> condition)シンプルに否定. 「引数に指定した conditionの notの状態になるまで」待機. …ってこのメソッドも無くなってるし( ゚д゚ )使えそうとか思ったのに…(;ω;`)
とりあえず以上. なんか無くなってるのか違うとこ見てるのかわからないのが2つほどあったけど…
枠とか試してみたけど…レイアウトって難しい(・ω・`)
invisibilityOfElementLocatedはDOMに含まれているが見えない状態を判定するのではないでしょうか。
返信削除