Selenium 2.X (確認したのは2.28) で指定したHTML要素が存在しないことをチェックするには、
WebDriver#findElements(By)を使う。返値 (List
) の長さが0なら、存在しない。例えば、hogeクラスが指定されたdiv要素が存在しないことをチェックするなら、下記のようになる。
if (driver.findElements(By.cssSelector("div.hoge")).size() == 0) {
// hogeクラスが指定されたdiv要素は存在しない
}
このことは、WebDriver#findElements(By)じゃなくて
WebDriver#findElement(By)のJavadocに書いてある。ちょっと回りくどい上に、使うメソッドのJavadocには特に何も書いてなくて、よく見失う。
findElement should not be used to look for non-present elements, use findElements(By) and assert zero length response instead.
WebDriver#findElement(By)
1.XのAPIだと、
Selenium#isElementPresent(String)というそのものズバリのメソッドがある。後方互換性があるから今でも動作するけれど、それを使うのにはパッと思いつくだけでデメリットが3つある。というわけで、なるべく2.XのAPIで統一していきたい。
- 1.XのAPIは要素の指定で、バグを作りやすい ("locatorType=argument"フォーマットのStringで、"locatorType="の省略時動作に暗黙のルールがある)
- APIのスタイルが混在すると、リーダビリティが下がる
- 古いAPIはいつまでも使い続けられるとは限らない
References
0 件のコメント:
コメントを投稿