「Book of Geb」に従って、ポータルの Web ページのマッピングを開始しました。私は、静的コンテンツ クロージャ ブロック内で定義された変数を使用し、後でページ メソッドでそれらにアクセスすることを好みます。
static content = {
buttonSend { $("input", type: "submit", nicetitle: "Senden") }
}
def sendLetter() {
waitFor { buttonSend.isDisplayed() }
buttonSend.click()
}
残念ながら、Geb 待機タイムアウト例外 (60 秒後) が発生したり、さらに悪いことに、よく知られている "StaleElementReferenceException" が発生したりすることがあります。
「isDisplayed」の代わりに「isEnabled」を使用すると、待機タイムアウトを回避できましたが、「StaleElementReferenceException」については、以下の解決策しか適用できませんでした。
def sendLetter() {
waitFor { buttonSend.isEnabled() }
try {
buttonSend.click()
} catch (StaleElementReferenceException e) {
log.info(e.getMessage())
buttonSend.click()
}
}
この解決策はあまり良くないと思いますが、別の記事で説明されているように、明示的に待機することはできませんでした。したがって、いくつかの一般的な質問があります。
- ページが動的である場合、静的コンテンツ定義の使用を避けるべきですか?
- Geb が DOM をリフレッシュするのはいつですか? DOM リフレッシュをトリガーするにはどうすればよいですか?
- CSS セレクターを使用しているときに「StaleElementReferenceException」が引き続き発生するのはなぜですか?
この問題を理解または解決するのに役立つすべてのヒントをいただければ幸いです。私はまだ初心者なので、簡単なコード例を用意するのが最善です。ありがとうございました!