#要素が出現するまで待機する
WebDriverで要素が出現するまで待機する場合、WebDriver::waitとWebDriver::Until::elementLocatedを組み合わせて以下のように記述することで対応できます。
elementLocatedの使用例
//idがtestのdiv要素が取得できるまで最大10秒待機する
driver.wait(webdriver.until.elementLocated(webdriver.By.xpath("//div[@id='test']")), 10000).then(function(element){
//取得できた
//elementには対象の要素が格納されている
}, function(err){
//timeoutした場合の処理
});
#要素が削除されるまで待機する
では、要素が削除(DOMツリーから削除、又は外れる)した際に処理を行いたい場合はどうすればいいでしょうか。残念ながらwebdriverjsのソースコードを拝見した限りでは専用のメソッドは用意されていないようです。そのため、以下のようにメソッドを自作する必要があります。
elementRemovedの実装例
//要素が取得できた場合はfalse、取得できなかった場合はtrueを返す
function elementRemoved(locator){
return new webdriver.Condition(
//エラーメッセージ
'要素が削除されませんでした',
//判定メソッド
function(driver) {
//findElementsで要素を検索し、ヒット数が0ならtrueを返す
return driver.findElements(locator).then(function(elements) {
return elements.length === 0;
});
});
}
これをWebDriver::waitと組み合わせることで要素が削除されるまで待機することができます。
elementRemovedの使用例
//idがtestのdiv要素が削除されるまで最大10秒待機する
driver.wait(elementRemoved(webdriver.By.xpath("//div[@id='dialog']")), 10000).then(function(){
//削除された
}, function(err){
//timeoutした場合の処理
});
#最後に
要素が削除されるまで待機するケースは、例えばダイアログを閉じるボタンをクリックし、その後、確実に閉じたことが確認された後に処理を流したい場合等が考えられます。尚、今回は一例として挙げましたが、より複雑な条件で待機処理を書く時にも同様の手法で応用可能ですのでご参考ください。