Пропуск проверки радиокнопки, когда она не отображается в 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) { }
Другие вопросы по тегам