2

テストを自動化するために、webdriverでgebを使い始めたところです。 私が理解しているように、ページにコンテンツを定義するときは、コンテンツ定義を呼び出すたびにページ要素を検索する必要があります。

//In the content block of SomeModule, which is part of a moduleList on the page:
itemLoaded {
    waitFor{ !loading.displayed }
}
loading { $('.loading') }


//in the page definition
moduleItems {index -> moduleList SomeModule, $("#module-list > .item"), index}

//in a test on this page
def item = moduleItems(someIndex)
assert item.itemLoaded

$('.loading')したがって、このコードでは、モジュールの基本要素のコンテキスト内で、セレクターによってページ上の要素を見つけるために、繰り返し呼び出される必要があると思います。ただし、この時点でStaleElementReference例外が発生することがあります。私の知る限り、要素はページから削除されませんが、削除されたとしても、$バックグラウンドでキャッシュを実行しない限り、この例外は発生しませんが、その場合は、あらゆる種類のその他の問題。

誰かがここで何が起こっているのか理解するのを手伝ってもらえますか?要素の検索中にStaleElementReferenceExceptionが発生する可能性があるのはなぜですか?関連するドキュメントまたはgebソースコードへのポインタも役立ちます。

4

1 に答える 1

1

問題は、モジュール自体によって表される要素への参照が、要素ではなく、変更によって古くなったことであることが判明しました.loading。モジュールのベース要素内を検索して.loading要素を見つけようとしていたため、例外がその行から発生したと思われます。解決策は、モジュール内の要素をチェックすると同時にモジュールをロードすることです。この場合、次のようになります。

//In the content block of SomeModule, which is part of a moduleList on the page:
itemLoaded { !loading.displayed }
loading { $('.loading') }

//in the page definition
moduleItems {index -> moduleList SomeModule, $("#module-list > .item"), index}

//in a test on this page
waitFor { moduleItems(someIndex).itemLoaded }

私を正しい方向に向けてくれたgeb-userメーリングリストのMarcinに感謝します。

于 2012-09-01T03:34:06.497 に答える