2016-04-26 16 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; 
}