Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SeleniumWebDriver中的无限等待_Java_Selenium_Selenium Webdriver - Fatal编程技术网

Java SeleniumWebDriver中的无限等待

Java SeleniumWebDriver中的无限等待,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我实际上有三个问题: SeleniumWebDriver如何实现这一点 driver.manage().timeout().pageLoadTimeout(-1,TimeUnit.SECONDS) 因为我们不能给无限睡眠的线程一个负值 我做了一个这样的无限睡眠代码 有没有更好的方法来实现无限等待 我使用driver.manage()。我所做的只是在页面尝试加载时断开网络连接,但我得到了一个意外的结果,经过一段时间后,驱动程序完全启动,但它不应该完全启动浏览器,它应该无限等待 我们在Seleniu

我实际上有三个问题:

  • SeleniumWebDriver如何实现这一点
    driver.manage().timeout().pageLoadTimeout(-1,TimeUnit.SECONDS)
  • 因为我们不能给无限睡眠的线程一个负值

  • 我做了一个这样的无限睡眠代码
  • 有没有更好的方法来实现无限等待

  • 我使用
    driver.manage()。我所做的只是在页面尝试加载时断开网络连接,但我得到了一个意外的结果,经过一段时间后,驱动程序完全启动,但它不应该完全启动浏览器,它应该无限等待
  • 我们在SeleniumWebDriver文档中看到了这一点

        /**
         * Sets the amount of time to wait for a page load to complete before throwing an error.
         * If the timeout is negative, page loads can be indefinite.
         *
         * @param time The timeout value.
         * @param unit The unit of time.
         * @return A Timeouts interface.
         */
        Timeouts pageLoadTimeout(long time, TimeUnit unit);
    

    我建议您添加自己的
    findElement()
    方法,而不是试图欺骗Selenium

    免责声明: 我衷心建议你不要这样做。等待是有原因的。如果您有一个无限的等待,那么如果您在出现问题时不手动干预,您的测试将永远运行。相反,我建议将其设置为一个非常高的数字,但不要无限大

    你可以这样做:

    WebElement findElement(By by) {
      int attempts = 0;
      while (attempts > 300)
        try {
          return driver.findElement(by);
        } catch (Exception e) {
          Thread.sleep(500);
          attempts++;
        }
      }
    }
    
    这里没有必要有无限循环

    再一次,我不建议做以上的事情!我只是提供给你这个解决方案,因为这是你明确要求的

    你可以做的另一件事是,如果你真的想设置一个大的等待:

    driver.manage().timeouts().pageLoadTimeout(300, TimeUnit.SECONDS)
    

    那是300秒。。。即使对我来说,这也是非常令人讨厌的,不应该放进去。网页加载不应花费300秒。如果确实如此,那么您还需要修复一些其他问题(
    ;)

    您好,如果您创建了等待方法并将其保留在项目中,您可以在任何时间和任何地方使用该等待方法,这是一种自定义方法

     private static WebElement waitForElement(By locator,int timeout)
    {
        WebElement element=new WebDriverWait(driver,timeout).until(ExpectedConditions.presenceOfElementLocated(locator));
        return element;
    }
    
    例如,如果您想要等待元素id,您可以按如下所示行代码

    **waitForElement(By.id(""),20);**
    

    这里是20毫秒,你可以在这里使用任何时间和webelement

    @谢谢你的帮助实际上这是因为我知道它不应该在真实场景中使用。我只是尝试深入了解selenium webdriver。这就是它和java。顺便说一句,谢谢你的评论。
    **waitForElement(By.id(""),20);**