当我在同一页面上有15个以上具有不同xpath的按钮时,无法继续下一个按钮

时间:2019-02-11 10:53:14

标签: java selenium-webdriver

当我在同一页面上有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();
}

当我单击“编辑”按钮时,它将成功单击并也可以使用“保存”按钮。 但是,在单击另一个(下一个)“编辑”按钮时,它无法单击第二个“编辑”按钮。

Check the attached image having EDIT and Save button.

2 个答案:

答案 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);
}