Пропуск проверки радиокнопки, когда она не отображается в Selenium
Я пытаюсь заставить Selenium Webdriver проверить, отображается ли переключатель, а если нет, пропустить шаг и двигаться дальше. У меня есть несколько версий веб-приложения, и в более новой версии реализован новый переключатель, который недоступен в более старых версиях, но я хочу протестировать несколько версий приложения, используя один и тот же код селена. Я использую код Java для написания своих сценариев, и это то, что у меня до сих пор...
У меня есть класс Utilities, который включает в себя несколько других функций для использования в других моих классах, называемых AdminUtils.java, и я написал следующее, чтобы найти элемент переключателя и щелкнуть его, когда найден:
public static void clickPrivate() {
WebElement rdBtn_Private = AdminUtils.driver.findElement(By.id("type-radio-private"));
rdBtn_Private.click();
}
Затем у меня есть класс Base Test, где я вызываю функцию (наряду с другими шагами до и после этого шага):
ArchiveUtils.clickPrivate();
Это работает как с более новой версией веб-приложения, но выдает ошибки в более старых версиях, так как кнопка не существует в этих версиях. Я читал вокруг этого и других сайтов, на которых есть предложения по схожим функциям, но я относительно новичок в Java и Selenium, так что переводить то, что я пытаюсь сделать, до сих пор неэффективно. Я пытался вызывать вызовы try и.IsDisplayed, но я не был уверен, какой класс требовал их, и это вызывало исключения nullPointerExceptions ниже в моем классе Base Test при попытке выполнить тест. Будем очень благодарны любой помощи. Заранее спасибо!
2 ответа
Вам понадобится новый метод, который просто проверяет, есть ли переключатель или нет.
public static boolean isPrivateRadioButtonExist() {
return driver.findElements(By.id("type-radio-private")).size() != 0;
}
Затем в своем базовом тестовом классе вызовите этот метод, чтобы определить, нужно ли пропустить шаг или нет.
Однако то, как вы подходите к своей проблеме, неверно. Если у вас есть несколько версий веб-приложения, у вас также должно быть несколько версий ваших автоматических тестов. Один из способов - следовать стратегии ветвления вашего веб-приложения. Это избавит вас от необходимости использовать всевозможные операторы if в вашем коде.
Вы можете использовать короткое явное ожидание в одну секунду, чтобы проверить, существует ли элемент. Если он нажмет на него, и если он не поймает исключение, продолжите тестирование.
WebDriverWait wait = new WebDriverWait(AdminUtils.driver, 1);
try {
wait.until(ExpectedConditions.presenceOfElementLocated(By.id("type-radio-private"))).click();
}
catch (TimeoutException) { }