迭代元素循环时获取陈旧元素异常

时间:2016-06-17 04:29:21

标签: java selenium selenium-webdriver

构建迭代器以迭代WebElement列表:

List<WebElement> rowElements = driver.findElements(By.tagName("tr"));
for (WebElement element : rowElements)
{
    List<WebElement> elements = element.findElements(By.tagName("td"));
    for (WebElement localElement : elements)
    {
        localElement.getText();// Next localElement is stale after select statement is run.**
        if (!localElement.getText().equalsIgnoreCase(""))
        {
            Select newSelectElement = new Select(driver.findElement(By.tagName("select")));
            newSelectElement.selectByValue("value to select");// This causes a page refresh through Ajax call.
            final WebDriverWait wait = new WebDriverWait(driver, 30);
            wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id("ajaxStatusModalPanelContainer")));
        }
    } // inner "For" loop ends
}

所以现在的问题是:

如果我尝试在生成localElement来电的select操作后ajax执行任何命令。在此单击之后,localElement已过时,您无法再次访问它,除非您执行全新例程以使用任何By调用再次找到它。

有没有办法处理这种情况并做一些事情  像WebElement.refresh()一样来解除当前或下一次的到来  元件。我使用java作为代码语言。

1 个答案:

答案 0 :(得分:0)

是的,你必须在陈旧后再次获取所有元素。更新SELECT会导致相关元素的更新,因此它们会过时。然后,您必须全部重新获取它们。

如果您将提供有关您的方案和相关HTML的更多详细信息,我可以帮助您重写代码以便正常工作。

相关问题