是否可以刷新过时的元素?
Is it possible to refresh stale elements?
我有一个包含 table 的搜索页面,在用户按下搜索按钮后,该页面会填充搜索结果。页面对象将搜索结果 table 的行包装在自定义 HtmlElement
class.
中
访问结果 table 时出现陈旧元素异常 - 如您所料,因为它刚刚被 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"));
}
经过一番尝试后,我想到了这个解决方案 - 它运行良好但不处理 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;
}
我有一个包含 table 的搜索页面,在用户按下搜索按钮后,该页面会填充搜索结果。页面对象将搜索结果 table 的行包装在自定义 HtmlElement
class.
访问结果 table 时出现陈旧元素异常 - 如您所料,因为它刚刚被 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"));
}
经过一番尝试后,我想到了这个解决方案 - 它运行良好但不处理 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;
}