【发布时间】:2015-07-27 19:28:50
【问题描述】:
我试图通过找到所有相应的“删除”按钮然后单击它们来删除页面上的几个元素。但是,当我从 DOM 中删除元素并且不确定如何优雅地解决这个问题时,我收到了“StaleElementReferenceException”。
这是我的代码:
List<WebElement> removeButtons = SeleniumCommands.findElementsByCss("[id^=removeForm_]");
System.out.println(removeButtons.size());
for (int i = removeButtons.size()-1; i >= 0; i--) {
SeleniumCommands.wait.until(ExpectedConditions.visibilityOf(removeButtons.get(i)));
removeButtons.get(i).click();
SeleniumCommands.waitClickById(ManageCommands.CONFIRMMODALOKBUTTON);
}
}
这里是删除按钮的一些 HTML...
<input id="removeForm_615" class="btn remove-task btn-danger" type="button" form_id="615" value="Remove" name="removeForm_615"/>
每个 removeForm 在下划线后面都有一个唯一的 ID。
有没有一种更有效的方式从 DOM 中删除元素,以这种方式在 for 循环样式或类似方法中摆脱我的 StaleElementReferenceException?
更新:这是当前编辑的代码:
while (true) {
try {
SeleniumCommands.waitClickByCss("[id^=removeForm_]");
} catch (NoSuchElementException e) {
break;
}
SeleniumCommands.waitClickById(ManageCommands.CONFIRMMODALOKBUTTON);
try { Thread.sleep(500); } catch (InterruptedException ie) { ie.getMessage(); }
}
当我这样做时,我得到一个TimeoutException,因为它仍在继续尝试查找By.selector: [id^=removeForm_]。如何修复它以使其按预期抛出NoSuchElementException?
供参考:
public static void waitClickByCss(String css) { wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector(css))).click(); }
【问题讨论】:
标签: java html selenium selenium-webdriver