Невозможно перейти к следующей кнопке, когда у меня есть кнопка 15+ на той же странице с другим xpath - PullRequest
0 голосов
/ 11 февраля 2019

Невозможно перейти к следующей кнопке, когда у меня есть кнопка 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();
}

Когда я нажимаю кнопку «Редактировать», она будет успешно нажата и будет работать и для кнопки «Сохранить».Но при нажатии на другую (следующую) кнопку «РЕДАКТИРОВАТЬ» она не может нажать на вторую кнопку «РЕДАКТИРОВАТЬ».

Проверьте прикрепленное изображение с кнопками «РЕДАКТИРОВАТЬ» и «Сохранить».

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Пожалуйста, попробуйте это.Он получает все столбцы и щелкает по одному для каждого цикла.Независимо от того, сколько кнопок редактирования есть.После редактирования он будет нажимать кнопку «Сохранить» каждый раз.Вы можете изменить согласно вашему требованию.

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();
}
0 голосов
/ 11 февраля 2019

Проблема в том, что вы начинаете с получения всех ссылок «Правка» на странице, проходите их по кругу, но в середине цикла вы заново получаете ссылку «Правка» (используя By.linkText(a[i])) и получаете только первую ищелкните по нему.

Вы уже загрузили все ссылки редактирования, вам не нужно ничего повторно (и вам не нужно проверять, что ссылка начинается с «E», поскольку это часть вашего локатора,text()='Edit'.

Кроме того, вы можете избежать StaleElementException, повторно загружая элементы в каждом цикле. StaleElementException s происходит потому, что страница (или часть страницы) перезагружается, и вы пытаетесь использоватьпеременная, хранящая ссылку на элемент перед перезагрузкой.

Упрощенный код приведен ниже.

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...