Вопрос заключается в следующем: возможно ли создать условие формата “если (искомый элемент == false), то { нажатие на кнопку }”? Подойдёт как условие, так и цикл “до”, например: пока (искомый элемент == false) повторять { нажатие на кнопку }
Я попыталась вызвать условие с driver.findElement…, но, конечно же, это не помогло, строка выделяется как ошибочная.
Используется Selenide, веб-драйвер FirefoxDriver, язык Java. На странице есть кнопка, которая вызывает появление списочного элемента, список - это линки. Мне надо нажать на кнопку, выбрать гиперссылку из появляющегося списка. При запуске авто-теста нажатие на кнопку не всегда вызывает список. То есть визуально понятно, что произошло нажатие на кнопку - она видоизменяется, но при этом выпадающий список появляется в 1 из 5 попыток. С чем это связано - не понятно, ожидание элементов в коде есть.
Встаёт вопрос, можно ли сделать так, чтобы после нажатия на кнопку вызывалось условие проверки наличия выпадающего списка?
Кусок кода:
WebDriver driver = new FirefoxDriver();
WebDriverWait wait = new WebDriverWait(driver, 5);
driver.findElement(By.xpath("//кнопка")).click(); // нажатие на кнопку
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//первый элемент списка"))); // поиск первого элемента списка
/*
Здесь требуется условие типа
if (driver.findElement(By.xpath("//первый элемент списка")) == false {
driver.findElement(By.xpath("//кнопка")).click();
}
Если элемент списка не найден, то требуется повторное нажатие на кнопку
*/
driver.findElement(By.xpath("//первый элемент списка")).click(); // выбор первого элемента списка
Прописывала вручную двойное нажатие на кнопку, но иногда оно срабатывает с первого раза, и вторым кликом список закрывается.
Это мой первый опыт в автоматизированном тестировании, так что могу ошибаться.
При попытке использовать команды с $ у меня вызываются новые копии браузера, с чем это может быть связано? Инициализация идёт в начале теста командой System.setProperty("webdriver.gecko.driver", "//путь до файла geckodriver");
После этого запуск проекта - driver.get("...");
При первом же столкновении с $ в коде запускается новая копия браузера, в которой, полагаю, должны происходить остальные действия, но авторизация в новой копии не проходит, естественно, и тест падает с ошибкой.
Ну да, если вы до этого открыли свой браузер, то селениду надо сказать использовать его. Для этого есть команда setWebDriver() - её нужно вызвать ДО первого доллара.
$("//кнопка").click();
$("//первый элемент списка").click();
JDI по умолчанию считает элемент найденным если он Visible
Поведение по умолчанию можно настроить как глобально (что считать что элемент найден), так и локально указав это в виде аннотации у элемента если для одного элемента нужна не такая проверка.
Как работать с элементом это его информация которую лучше описать в PageObject вместо указывания shouldBe(visible всюду где используется элемент)
Пример глобальной настройки (повторюсь в вашем случае она не нужна, так как по умолчанию > JDI ищет только Visible)
SearchStrategies.noValidation(); - как в Selenium
SearchStrategies.onlyVisible(); - только isDisplayed() - default
SearchStrategies.inView(); - элемент в области видимости пользователя - recommended
Для одного элемента
@UI("some-class-or-xpath") @GetVisible;
public UIElement myButton;
Можно использовать также аннотации: @GetAny @GetShowInView