2016-04-26 13 views
1

ユーザーが検索ボタンを押した後に検索結果が表示される表を含む検索ページがあります。ページオブジェクトは、検索結果テーブルの行をカスタムHtmlElementクラスにラップします。古い要素をリフレッシュすることはできますか?

結果テーブルにアクセスすると、古くなった要素の例外が発生します。これは、ajaxリクエストによってリフレッシュされたためです。

私は、検索を実行した後にページオブジェクトの新しいインスタンスを返すことで回避しましたが、検索結果フィールドを再作成したいだけです。これを行う方法はありますか?

例:

@FindBy(css = "[data-viewid='Table1'] .dojoxGridRow") 
List<ActivityPerformanceRow> results; 

// ... 

public void search() { 
    search.click() 
    waitForAjaxToComplete(); 

    // If it was a standard WebElement list I'd do something like this: 
    results = driver.findElements(By.cssSelector(
         "[data-viewid='Table1'] .dojoxGridRow")); 
} 
+0

PageObjectを初期化するときに使用する要素ロケータはどれですか?デフォルトではAjaxElementLocatorが使用されていますので、古い要素の問題はすべての要素アクセスで要素検索を実行しません。 – artkoshelev

答えて

0

遊んでのビットの後、私はこの解決策を考え出した - それはうまく動作しますが、のHtmlElement名プロパティを扱っていません。私はそれを使用しないとわかっていますが、今は無視しています...

public <T extends HtmlElement> List<T> findElements(Class<T> elementClass, By by) { 
    List<T> elements = new LinkedList<T>(); 

    for (WebElement element : driver.findElements(by)) { 
     elements.add(HtmlElementLoader.createHtmlElement(elementClass, element, null)); 
    } 

    return elements; 
} 
関連する問題