【问题标题】:WebDriverWait is deprecated in Selenium 4WebDriverWait 在 Selenium 4 中已弃用
【发布时间】:2020-03-18 11:48:30
【问题描述】:

我得到了一个

警告:(143,13) 'WebDriverWait(org.openqa.selenium.WebDriver, long)' 已弃用

在 Selenium 4.0.0-alpha-3 中。

但官方Selenium page只列出

WebDriverWait(WebDriver driver, Clock clock, Sleeper sleeper, long timeOutInSeconds, long sleepTimeOut)

已弃用。

怎么了?我正在使用 IntelliJ,这可能是他们的问题吗?

【问题讨论】:

    标签: java selenium selenium-webdriver webdriverwait selenium4


    【解决方案1】:

    此警告消息...

    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;
        }
        

    因此您会看到错误。


    但是,我在 Seleniumv4.0.0-alpha* Java 客户端更改日志中看不到对 WebDriverWait 类的任何更改,并且该功能应继续按照当前实现运行。

    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.
    

    结论

    Selenium 的 Java 客户端 v4.0.0-alpha-3 仍然是 alpha 版本,需要通过 beta 版本,因此应该不能用于生产环境中的测试活动。


    解决方案

    一个直接的解决方案是降级到当前的发布级别 Version 3.141.59

    【讨论】:

      【解决方案2】:

      它没有出现在文档中,但是如果您查看source code,您会看到@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));
      

      【讨论】:

        【解决方案3】:
        WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
        

        改用这个,只支持WebDriverWait(driver, clock);

        【讨论】:

        • 在 selenium 版本 4.0.0-alpha-7 中使用后没有警告
        【解决方案4】:

        给出以下警告的代码:

        driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
        

        警告:
        WebDriver.Timeouts 类型中的方法 implicitlyWait(long, TimeUnit) 已弃用。

        适用于 selenium4 的更新:

        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
        

        【讨论】:

          【解决方案5】:

          此代码 sn-p 与 Selenium 4.0 一起使用:

          driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
          

          【讨论】:

            【解决方案6】:

            如您所说,使用 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));
            

            【讨论】:

              猜你喜欢
              • 2020-02-06
              • 2023-02-03
              • 2021-12-15
              • 1970-01-01
              • 2014-08-11
              • 2021-02-19
              相关资源
              最近更新 更多