Selenium WebDriver Java - как выполнить «если существует, то нажать, иначе пропустить»? - PullRequest
0 голосов
/ 18 сентября 2018

На моей странице иногда отображаются предупреждения.(это на самом деле уведомления в Salesforce) Эти предупреждения нарушают мои сценарии, поскольку мои сценарии не могут найти элементы, стоящие за предупреждениями.Я хотел бы проверить наличие предупреждений и, если они существуют, отклонить их.Если они не существуют, переходите к следующему шагу.

Вторичная проблема заключается в том, что может быть более одного из этих предупреждений.Таким образом, он может отклонить от 1 до 6 или более предупреждений.

Я добавил этот код в свой тестовый скрипт, и он работает, если есть ОДНО предупреждение.Очевидно, что мой сценарий завершается ошибкой, если имеется более одного оповещения или если оповещений ноль.

driver.findElement(By.xpath("//button[contains(@title,'Dismiss notification')]")).click();

Я все еще изучаю Java, поэтому, пожалуйста, будьте осторожны.;) Но я бы хотел поместить это в метод, чтобы он мог искать эти кнопки, щелкать, если они существуют, продолжать искать больше, пока не найдет ни одной, а затем двигаться дальше.Я просто не знаю, как это сделать.

Я тоже использую TestNG, я знаю, что разница в том, что допустимо, а что нет.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Вы можете использовать wait с try / catch, чтобы получить все кнопки и щелкнуть по каждой кнопке, если она существует.

1.Если все предупреждения появляются одновременно, используйте код ниже:

try{
      new WebDriverWait(driver, 5)
              .ignoring(ElementNotVisibleException.class, NoSuchElementException.class)
              .until(ExpectedConditions.visibilityOfAllElements(driver.findElements(By.cssSelector("button[title*='Dismiss notification']"))))
      .forEach(WebElement::click);
} catch (Exception ignored){ }

2.Если предупреждения появляются в одиночку, используйте код ниже:

try{
    while(true) {
        new WebDriverWait(driver, 5)
                .ignoring(ElementNotVisibleException.class, NoSuchElementException.class)
                .until(ExpectedConditions.visibilityOf(driver.findElement(By.cssSelector("button[title*='Dismiss notification']"))))
                .click();
    }
} catch (Exception ignored){ }
0 голосов
/ 18 сентября 2018

Используйте findElements, который вернет список 0, если элемент не существует.

EG:

List<WebElement> x = driver.findElements(By.xpath("//button[contains(@title,'Dismiss notification')]"));

if (x.size() > 0)
{
    x.get(0).click();
}
// else element is not found.
...