当我在同一页面上有15个以上具有不同xpath的按钮时,无法继续下一个按钮
List<WebElement> alllinks = driver.findElements(By.xpath("//a[text()='Edit']"));
// To print the total number of links
String a[] = new String[alllinks.size()];
try
{
for (int i = 0; i < alllinks.size(); i++)
{
a[i] = alllinks.get(i).getText();
if (a[i].startsWith("E"))
{
System.out.println("clicking on this link::" + driver.findElement(By.linkText(a[i])).getText());
driver.findElement(By.linkText(a[i])).click();
driver.findElement(By.xpath("//button[@name='save']")).click();
} else
{
System.out.println("does not starts with E so not clicking");
}
}
} catch (StaleElementReferenceException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
当我单击“编辑”按钮时,它将成功单击并也可以使用“保存”按钮。 但是,在单击另一个(下一个)“编辑”按钮时,它无法单击第二个“编辑”按钮。
答案 0 :(得分:0)
请尝试这个。它获取所有列,并在每个循环中一一单击。无论那里有多少个编辑按钮。 编辑后,每次都会单击保存。您可以根据需要进行修改。
List<WebElement> alllinks = driver.findElements(By.xpath("//div[@id='customers-grid']/table/tbody/tr/td")); // here give unique id if this one is not unique.
try
{
for (WebElement ele : alllinks )
{
ele.click();
driver.findElement(By.xpath("//button[@name='save']")).click();
}
} catch (StaleElementReferenceException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
答案 1 :(得分:-2)
问题是,您首先获取页面上的所有“编辑”链接,然后循环浏览它们,但是在循环的中间,您重新获得了“编辑”链接(使用By.linkText(a[i])
),并且仅获得第一个一个并单击它。
您已经获取了所有“编辑”链接,不需要重新获取任何内容(并且不需要验证链接以“ E”开头,因为这是定位符text()='Edit'
的一部分。< / p>
此外,您可以通过重新获取每个循环中的元素来避免使用StaleElementException
。之所以发生StaleElementException
是因为重新加载了页面(或页面的一部分),并且您尝试使用变量来存储重新加载之前的元素引用。
下面是简化的代码。
By editButtonLocator = By.xpath("//a[text()='Edit']");
List<WebElement> alllinks = driver.findElements(editButtonLocator);
for (int i = 0; i < alllinks.size(); i++)
{
alllinks.get(i).click();
driver.findElement(By.xpath("//button[@name='save']")).click();
// get the list again to avoid StaleElementException
alllinks = driver.findElements(editButtonLocator);
}