用例:
单击页面上的按钮 它将打开一个新的div弹出窗口(具有所有此父菜单->子菜单-子子菜单层次结构,以便选择模板-可以有n个子菜单和子子菜单) 重复选择每个子孩子-但在选择每个子孩子后还有其他步骤可以遵循。必须单击div弹出窗口上的“添加”,在其后显示的小弹出窗口上输入页面的名称,单击“添加”,然后再次导航到上一个页面(带有herirachy)以选择下一个子子对象 现在,它为Stale元素引用提供了例外
为了避免过时的元素异常,尝试使用while循环(以及try和catch)尝试至少两次进行子选择步骤,现在它执行了,但是在每个循环中它始终选择第一个子-注意,它不会输入再次尝试catch循环。
参考代码
public static void selectpage(){
driver.findElement(By.xpath(".//[@id='root']/div[2]/
div/div[1]/span[2]")).click();
driver.findElement(By.xpath(".//*
[@id='root']/div[2]/div[1]/span/span")).click();
}
public void pageLayout() throws InterruptedException {
selectpage();
List<WebElement> outerLIElementList = driver.findElements(By.xpath(".//*
[@id='root']/div/div[1]/div/div[*]"));
System.out.println(outerLIElementList.size());
// iterate through the rows in the outer element
for (WebElement outerLIElement : outerLIElementList) {
// find the inner table rows using the outer table row
List<WebElement> innerLIElementList =
outerLIElement.findElements(By.xpath("//div[2]/div[*]/section"));
System.out.println(innerLIElementList.size());
// iterate through the inner table rows and sysout
for (WebElement innerLIElement : innerLIElementList) {
Thread.sleep(5000);
int attempts = 0;
while (attempts<2){
try {
Actions builder = new Actions(driver);
builder.moveToElement(innerLIElement).build().perform();
System.out.println(innerLIElement.getText());
builder.moveToElement(innerLIElement).click(innerLIElement);
builder.perform();
break;
}
catch (StaleElementReferenceException e){
}
attempts++;
}
driver.findElement(By.xpath(".//[@id='root']/div/div[2]/button[2]")).click();
driver.findElement(By.xpath(".//[@id='root']/div/div/
/div[2]/div/input")).sendKeys("Test");
driver.findElement(By.xpath(".//*[@id='root']/div/div/
/div[2]/button[2]")).click();
Thread.sleep(1000);
selectpage();
} }
答案 0 :(得分:0)
如果我正确地跟随您,那将是您的
List<WebElement> outerLIElementList = driver.findElements(By.xpath(".//*
[@id='root']div/div[*]"));
过时了。您需要每次查找元素。我将迭代此列表的长度,并基于该迭代找到特定的div。
sudo代码:
for(int child = 0; child<len(outerLIElementList); child++)
driver.findElement(By.xpath(".//*[@id='root']div/div[{0}]", child));
等