![](/img/trans.png)
[英]org.openqa.selenium.StaleElementReferenceException: WebElement is stale
[英]“StaleElementReferenceException” in Selenium for a List<WebElement>
请参考下面的代码,该代码将从findtable方法中获取所有orderID,并将所有orderID传递给clickonIndividualOrderID方法,因此光标移至每个orderid并单击它,将出现一个新页面,并获取状态和单击完成,现在返回旧页面,如果我们尝试选择下一个orderID,它将引发误解
您能否提出一些解决此问题的方法,请先谢谢
List<WebElement> orderID = new ArrayList<WebElement>();
List<WebElement> statusID = new ArrayList<WebElement>();
public void OrderandReleases()
{
orderID = outboxpage.findtable(orderID);
util.pause("1");
statusID = outboxpage.findordernumber(statusID, orderID);
}
public List<WebElement> findOrderID(List<WebElement> orderID) {
WebElement table = driver.findElement(By.id("_kod7c3"));
List<WebElement> allRows = table.findElements(By.tagName("tr"));
//And iterate over them, getting the cells
for (int i = 1; i < allRows.size(); i++) {
List<WebElement> alltd = allRows.get(i).findElements(By.tagName("td"));
for (int j = 0; j < alltd.size(); j++) {
if (j == 1) {
orderID.add(alltd.get(j));
continue;
}
}
}
return orderID;
}
public List<WebElement> clickonIndividualOrderID(List<WebElement>
statusID,List<WebElement> orderID){
for (int i = 0; i < orderID.size(); i++) {
WebElement table = driver.findElement(By.id("_kod7c3"));
if (table.isDisplayed()) {
System.out.println("Clicking on
order="+orderID.get(i).getText()); -> //first time it will run fine , second time when it loops back it will thow the execption StaleElementReferenceException here
orderID.get(i).click(); -> //it is clicking on a order link and it will take me to next page
driver.findElement(By.id("_jxndro")).click();
WebElement table2 = driver.findElement(By.xpath("//*
[@id=\"_mfb\"]"));
List<WebElement> allRows2 =
table2.findElements(By.tagName("tr"));
String col = "";
for (int j = 1; j < allRows2.size(); j++) {
List<WebElement> alltd2 =
allRows2.get(j).findElements(By.tagName("td"));
int flag = 0;
for (int k = 0; k < alltd2.size(); k++) {
col = alltd2.get(k).getText().toString().trim();
System.out.println(col);
if (col.equals("Failed")||col.contains("FE-")) {
statusID.add(alltd2.get(++k));
driver.findElement(By.id("_uvsub")).click(); --> // it will take me back to the first page
flag =1;
break;
}
}
if(flag==1)
break;
}
}
}
return statusID;
}
StaleElementReferenceException
的官方文档说:
指示对元素的引用现在“已过时” ---该元素不再出现在页面的DOM上。
如果您像在做的那样在页面之间来回导航,则这是预期的行为。
解决此问题的通常方法是不跟踪循环外的WebElement
,而是在每次迭代期间在循环内找到它们。 像这样:
// this will not change, but you need to adjust for your case!
By pageLocator = By.tagName("a");
int pageCount = driver.findElements(pageLocator).size();
for (int i = 0; i < pageCount; i++) {
WebElement pageLink = driver.findElements(pageLocator).get(i);
pageLink.click();
// at this point pageLink is gone stale!
// do some stuff
driver.navigate().back();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.