2013年4月11日木曜日

Conditionのカスタム

ちょっと前にまとめた Wait.until()と、その引数の condition. あの時まとめた既存の物じゃ, 正直今やってるテストがカバーしきれないと思いカスタムしてみたのでメモメモφ(・ω・ )

Conditionのカスタム


といっても正直コピペなんだけどね…

1. 状況

対処したい状況は, 「画像リソースでチェックボックスを表現してる. しかもAjaxで表示を書き換える仕様」といった状況. 
当然 elementToBeSelected系列は使えないし, stalenessOfもページがリロードされるわけでもないから使えない.

なので, 「チェックされているボックスの画像が, x枚になるまで」待機, みたいな形にしてみた.

2. メソッド

ベースにしたのは titleIs. 一番シンプルだし, 戻り値 Booleanだし.
  public static ExpectedCondition<Boolean> countBy(final By by, final int expectedSize) {
    return new ExpectedCondition<Boolean>() {
      public Boolean apply(WebDriver driver) {
        return driver.findElements(by).size() == expectedSize;
      }
    };
  }
本当にちょびっとの改造. 引数は Byロケーターと期待する数.
なんてことはなく, titleIsで「タイトルが引数と一致する」という条件を書いてた部分を, 「Byで指定したWebElementの size()が, 引数の expectedSizeに一致する」に書き換えただけ. この程度なら意外と簡単.
ちなみにちゃんとロケーターを引数にして, 中で driver.findElements()で取得しなおしてやりましょう.
WebElementや List<WebElement>を直で渡そうとすると, 取得のし直しがない = ページの方は変更があっても size()変わらない = ちゃんと動かない なんていうただのストッパーが出来上がります.




とまぁこんな風に近いメソッドをひっぱり出してきてちょこっと改造してやるだけでも, 一層テストしやすくなるかも. +(・ω・0)*

0 件のコメント:

コメントを投稿

AWS CDKで立てたEC2インスタンスのTimeZoneとかいじりたかった話

EC2を立てることはできたけど、立てたインスタンスは UTCのままだし設定ファイルとかいちいちscpしてくるのはダルい。 当初UserDataでなんとかしようとしたものの、「書く量がヤバいしメンテしにくい」と悩んでいたところ見かけたのが  AWS::CloudFormation:...