wait.until (ExpectedConditions) больше не работает в seleniumе
До сих пор я использовал версию seleniumа 2.45.0, и все мои ожидания были выполнены следующим образом:
WebDriverWait wait = new WebDriverWait(webKitUtility.getWebDriver(), 5); wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("role")));
Но я обновил selenium до 3.1.0, и я получаю сообщение об ошибке:
«Метод до (Predicate) в типе FluentWait не применим для аргументов (ExpectedCondition)»
- PyQt QProgressBar не работает, когда я использую его с Selenuim
- Как выбрать элемент из выпадающего списка с помощью Selenium WebDriver с java?
- Как захватить снимок экрана определенного элемента, а не всей страницы, используя Selenium Webdriver?
- Использование XPATH для поиска текста, содержащего & nbsp;
- pageLoadTimeout в Selenium не работает
Я вижу, что с 2.45.0 до 3.1.0 некоторые вещи устарели. Я пытаюсь выяснить, что является лучшим способом сделать это сейчас, но я не уверен. Большинство вещей, которые я нахожу в Google, – это старая информация, объясняющая то же самое, что я использовал до сих пор.
- Любые предложения по тестированию кода extjs в браузере, желательно с seleniumом?
- Selenium IE WebDriver работает только при отладке
- Запуск тестов Selenium в нескольких браузерах один за другим с C # NUnit
- Страtagsя загрузки страницы для драйвера Chrome (обновлено до Selenium v3.12.0)
- Selenium vs HtmlUnit?
- Нажмите клавишу (Ctrl + A) Selenium WebDriver
- Webdriver Не удается подключиться к хосту 127.0.0.1 на порту 7055 после 45000 мс
- selenium.common.exceptions.InvalidSelectorException с "span: contains ('string')"
Я была такая же проблема.
Я исправил его, используя не устаревший .until()
WebDriverWait
и добавив следующее к моему maven pom.xml:
com.google.guava guava 21.0
Кроме этого, мой код выглядит как раньше.
Чтобы быть более конкретными, теперь есть два .until()
.
Старый (который устарел):
public void until(final Predicate
И новый:
public
Вам нужно будет добавить зависимость:
org.seleniumhq.selenium selenium-support 3.0.1
Это делается для того, чтобы ваш код все еще работал. Хотя в конечном итоге код нужно будет переписать, чтобы не использовать устаревший FluentWait.
Если вы используете maven для управления вашими зависимостями, проверьте иерархию зависимостей и проверьте используемую версию guava. selenium-remote-driver JAR требует версии guava 21. Добавьте исключение в артефакт, который использует нежелательную версию guava. Например:
io.github.bonigarcia webdrivermanager 1.5.1 com.google.guava guava
Вы можете сделать что-то подобное для нового FluentWait
new WebDriverWait(driver, 60).until(new Function() { Boolean isWindowFound = Boolean.FALSE; @Override public Boolean apply(WebDriver driver) { try { driver.switchTo().window("Your Window Name"); isWindowFound = Boolean.TRUE; } catch (NoSuchWindowException e) { System.out.println("Your Window Name not found"); System.out.println(driver.getTitle()); return isWindowFound; } return isWindowFound; } });
Я получил эту ошибку компиляции, когда я перешел из seleniumа 2 (org.seleniumhq.selenium: selenium-java: 2.53.0) в selenium 3 (org.seleniumhq.selenium: selenium-java: 3.4.0).
Как уже упоминалось выше, мне пришлось перейти с guava 18 (guava: com.google.guava: 18.0) на guava 21 (guava: com.google.guava: 21.0).
Однако мне также пришлось настроить сборку на использование Java 8, потому что
ExpectedCondition extends Function Function extends java.util.function.Function
где java.util.function.Function должен поступать из Java 8 JDK.
Для командной строки я изменил свою переменную среды JAVA_HOME на JAVA_HOME: C: \ Program Files \ Java \ jdk1.8.0_131
Для Eclipse, Windows -> Настройки, Java / Установленные JRE, Кнопка добавления, JRE home: C: \ Program Files \ Java \ jdk1.8.0_131 и имя JRE: jdk1.8.0_131.
Я столкнулся с аналогичной проблемой, связанной с java.util.function, после внесения вышеуказанных изменений в версию guava как 21 и изменения версии конфигурации плагина maven в maven-compiler-plugin 3.11.81.8
Я все еще придерживался той же ошибки, и assembly была неудачной. Решение для этого, чтобы удалить папку maven repo .m2 и импортировать проект с начала, а затем попытаться сделать следующие изменения. Попробуйте сделать обновление Maven после внесения изменений в версию selenium java и selenium сервера POM и попытайтесь выполнить maven чистым, а затем maven install.Showhow pom.xml все еще использовал старую версию selenium в моем случае. Я изменил используемую версию jdk на 1.8 после внесения изменений в плагин maven, и теперь он отлично работает для меня
Обратите внимание, если вы используете Maven, что порядок зависимостей имеет значение .
Например:
public static void main(String[] args) { System.setProperty("webdriver.gecko.driver", "/Users/me/geckodriver"); final WebDriver driver = new FirefoxDriver(); driver.get("https://www.google.com"); final WebDriverWait wait = new WebDriverWait(driver, 5); final By feelLuckyXpath = By.xpath("//div[@class='jsb']/center/input[@type='submit' and @name='btnI']"); wait.until(ExpectedConditions.visibilityOfElementLocated(feelLuckyXpath)).click(); driver.close(); }
этот код отлично работает со следующими зависимостями maven:
org.seleniumhq.selenium selenium-java 3.8.1 com.google.api-client google-api-client 1.22.0
но он может выйти из строя с измененным порядком:
com.google.api-client google-api-client 1.22.0 org.seleniumhq.selenium selenium-java 3.8.1
В этом случае, поскольку google-api-client
содержит:
com.google.guava guava-jdk5
как зависимость, которая затеняет guava
lib в selenium
lib.
В этом случае ошибка:
нет экземпляра (ов) типа (ов) типа V, чтобы ExpectedCondition <> …
до тех пор, пока в classе org.openqa.selenium.support.ui.FluentWait не может применяться к заданным типам; требуется: java.util.function.Function found: org.openqa.selenium.support.ui.ExpectedCondition reason: не может вызывать переменные типа V (несоответствие аргументов; org.openqa.selenium.support.ui.ExpectedCondition не может быть преобразован в функцию java.util.function.Function)