WebDriverWait устарел в Selenium 4
Я получаю
Предупреждение: (143,13) 'WebDriverWait(org.openqa.selenium.WebDriver, long)' устарел
в Selenium 4.0.0-alpha-3.
Но на официальной странице Selenium перечислены только
WebDriverWait(WebDriver driver, Clock clock, Sleeper sleeper, long timeOutInSeconds, long sleepTimeOut)
как не рекомендуется.
Что случилось? Я использую IntelliJ, может быть, это их проблема?
8 ответов
Его нет в документации, но если вы посмотрите исходный код, вы увидите@Deprecated
аннотация
@Deprecated
public WebDriverWait(WebDriver driver, long timeoutInSeconds) {
this(driver, Duration.ofSeconds(timeoutInSeconds));
}
В описании конструктора есть решение
@deprecated Вместо этого используйте {@link WebDriverWait#WebDriverWait(WebDriver, Duration)}.
Какой конструктор в любом случае вызывается из устаревшего.
new WebDriverWait(driver, Duration.ofSeconds(10));
Дайте так в Selenium 4, так как он лишен. Первый импорт.
import java.time.Duration;
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
driver.manage().timeouts().scriptTimeout(Duration.ofSeconds(30));
driver.manage().timeouts().pageLoadTimeout(Duration.ofSeconds(60));
Код, который дает следующее предупреждение:
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
Предупреждение:
метод
implicitlyWait(long, TimeUnit)
от типа
WebDriver.Timeouts
устарел.
Обновление, которое работает на selenium4:
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
Используйте это вместо этого, поддерживается только WebDriverWait(драйвер, часы);
Это предупреждающее сообщение...
Warning: (143,13) 'WebDriverWait(org.openqa.selenium.WebDriver, long)' is deprecated
... означает, что текущий конструктор WebDriverWait устарел.
Заглянув в код WebDriverWait.java, кажется:
Следующие методы устарели:
public WebDriverWait(WebDriver driver, long timeoutInSeconds)
@Deprecated public WebDriverWait(WebDriver driver, long timeoutInSeconds) { this(driver, Duration.ofSeconds(timeoutInSeconds)); }
public WebDriverWait(WebDriver driver, long timeoutInSeconds, long sleepInMillis)
@Deprecated public WebDriverWait(WebDriver driver, long timeoutInSeconds, long sleepInMillis) { this(driver, Duration.ofSeconds(timeoutInSeconds), Duration.ofMillis(sleepInMillis)); }
public WebDriverWait(WebDriver driver, Clock clock, Sleeper sleeper, long timeoutInSeconds, long sleepInMillis)
@Deprecated public WebDriverWait( WebDriver driver, Clock clock, Sleeper sleeper, long timeoutInSeconds, long sleepInMillis) { this( driver, Duration.ofSeconds(timeoutInSeconds), Duration.ofMillis(sleepInMillis), clock, sleeper); }
При этом были добавлены следующие методы:
public WebDriverWait(WebDriver driver, Duration timeout)
/** * @param driver The WebDriver instance to pass to the expected conditions * @param timeout The timeout when an expectation is called * @see WebDriverWait#ignoring(java.lang.Class) */ public WebDriverWait(WebDriver driver, Duration timeout) { this( driver, timeout, Duration.ofMillis(DEFAULT_SLEEP_TIMEOUT), Clock.systemDefaultZone(), Sleeper.SYSTEM_SLEEPER); }
public WebDriverWait(WebDriver driver, Duration timeout, Duration sleep)
/** * Wait will ignore instances of NotFoundException that are encountered (thrown) by default in * the 'until' condition, and immediately propagate all others. You can add more to the ignore * list by calling ignoring(exceptions to add). * * @param driver The WebDriver instance to pass to the expected conditions * @param timeout The timeout in seconds when an expectation is called * @param sleep The duration in milliseconds to sleep between polls. * @see WebDriverWait#ignoring(java.lang.Class) */ public WebDriverWait(WebDriver driver, Duration timeout, Duration sleep) { this(driver, timeout, sleep, Clock.systemDefaultZone(), Sleeper.SYSTEM_SLEEPER); }
WebDriver driver, Duration timeout, Duration sleep, Clock clock, Sleeper sleeper)
/** * @param driver the WebDriver instance to pass to the expected conditions * @param clock used when measuring the timeout * @param sleeper used to make the current thread go to sleep * @param timeout the timeout when an expectation is called * @param sleep the timeout used whilst sleeping */ public WebDriverWait(WebDriver driver, Duration timeout, Duration sleep, Clock clock, Sleeper sleeper) { super(driver, clock, sleeper); withTimeout(timeout); pollingEvery(sleep); ignoring(NotFoundException.class); this.driver = driver; }
Следовательно, вы видите ошибку.
Однако я не вижу изменений в WebDriverWait
Класс в Seleniumv4.0.0-alpha* Список изменений клиента Java, и функциональность должна продолжать работать в соответствии с текущей реализацией.
Клиент Selenium Java v4.0.0-alpha-3
журнал изменений:
v4.0.0-alpha-3
==============
* Add "relative" locators. The entry point is through the `RelativeLocator`.
Usage is like `driver.findElements(withTagName("p").above(lowest));`
* Add chromedriver cast APIs to remote server (#7282)
* `By` is now serializable over JSON.
* Add ApplicationCache, Fetch, Network, Performance, Profiler,
ResourceTiming, Security and Target CDP domains.
* Fixing Safari initialization code to be able to use Safari Technology
Preview.
* Ensure that the protocol converter handles the new session responses
properly.
* Expose devtools APIs from chromium derived drivers.
* Expose presence of devtools support on a role-based interface
* Move to new Grid, deleting the old standalone server and grid implementation.
* Switch to using `HttpHandler` where possible. This will impact projects that
are extending Selenium Grid.
* Respect "webdriver.firefox.logfile" system property in legacy Firefox driver.
Fixes #6649
* Back out OpenCensus support: OpenTracing and OpenCensus are merging, so
settle on one for now.
* Only allow CORS when using a —allow-cors flag in the Grid server
* If you're using the Java Platform Module System, all modules
associated with the project are generated as "open" modules. This
will change in a future release.
* The version of Jetty being used is unshadowed.
Вывод
Селена Java - клиент V4.0.0-альфа-3 все еще альфа - релиз и должен пройти через бета - релиз и, следовательно, не должны использоваться для проверки активности в производственной среде.
Решение
Непосредственное решение было бы понизить до текущего выпущенного уровня версии 3.141.59
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
борется с селеном 4.0
WebDriverWait wait = new WebDriverWait(driver,Duration.ofSeconds(10));
Вот какой драйвер нужно использовать для Selenium 4? Ранее в версии selenium 3.141 мы использовалиEventfiringWebDriver
Вместо следующих строк кода:
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
Использовать это:
driver.manage().timeouts().pageLoadTimeout(Duration.ofSeconds(30));
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(30));
По сути, вы заменяете параметр и заменяете два параметра (30, TimeUnit.SECONDS
) с одним (Duration.ofSeconds(30)
)