Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.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
Selenium 何时使用隐式等待以及在何处使用_Selenium_Selenium Webdriver - Fatal编程技术网

Selenium 何时使用隐式等待以及在何处使用

Selenium 何时使用隐式等待以及在何处使用,selenium,selenium-webdriver,Selenium,Selenium Webdriver,对于SeleniumWebDriver提供的隐式等待方法,我感到有些困惑 何时使用隐式等待 a-用于页面加载(当使用driver.get时)或Ajax弹出式加载,比如说我正在编辑框中输入一些内容,并且正在进行一些查找或Ajax调用 在哪里使用隐式等待 我应该在Ajax调用或页面加载发生的地方使用所有方法,还是只使用一次就足够了(我只是参考Selenium RC,在这里我们可以使用Selenium.SetSpeed方法) 谢谢, 阿伦 隐式等待和显式等待与我们在程序中使用的驱动程序实例相关。首

对于SeleniumWebDriver提供的隐式等待方法,我感到有些困惑

  • 何时使用隐式等待

    a-用于页面加载(当使用driver.get时)或Ajax弹出式加载,比如说我正在编辑框中输入一些内容,并且正在进行一些查找或Ajax调用

  • 在哪里使用隐式等待

    我应该在Ajax调用或页面加载发生的地方使用所有方法,还是只使用一次就足够了(我只是参考Selenium RC,在这里我们可以使用Selenium.SetSpeed方法)

  • 谢谢, 阿伦
  • 隐式等待显式等待与我们在程序中使用的驱动程序实例相关。首先是明确的 等待我们可以使用显式等待特定条件/Web元素 发生/单击,其寿命取决于创建的等待对象
  • 例如:

    上面是使用显式等待直到的示例,这是使用此类等待的最有效方法之一

    • 第二,当谈到隐性等待时,这种等待伴随着生命 驱动程序实例的。只需声明一次,就可以在调用驱动程序实例的任何地方使用它
    • 关于您提到的问题,无论是在Ajax调用之后还是在page之后 加载,所以我建议检查您创建了多少驱动程序类实例。因为一旦声明隐式等待一个驱动程序实例,就不必再次声明该驱动程序实例
    • 当您确定时间时,在程序中使用隐式等待 由网页上的所有web元素加载/可见并用于 某些Web元素,您发现时间是其中的一个变化因素 它正在加载,然后您可以使用显式等待

      • 对于ajax调用,我更喜欢显式等待。但是如果您能够确定ajax调用的最小时间戳是多少,那么您可以在隐式wait中提供

        隐式等待在驱动程序上永久强制执行。所以你不需要一次又一次地申报。它会影响驱动程序等待特定的时间,直到它抛出
        NoTouchElementException
        。但是如果您更多地使用XPath,那么最好在隐式等待中提供更大的超时

        要添加的另一件事是,隐式wait只影响findElement和findElements函数。其他功能不受影响

      • 显式的等待是您定义的等待特定条件发生后再继续执行代码的代码。最糟糕的情况是
        Thread.sleep()
        ,它将条件设置为等待的确切时间段。提供了一些方便的方法,可以帮助您编写只在需要时等待的代码
        WebDriverWait
        结合
        ExpectedCondition
        是实现这一点的一种方法。示例如下:

        WebDriverWait wait = new WebDriverWait(driver, 10);
        WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("someid")));
        
      • 但是,根据语言实现的不同,会有一些不同。有关
        ExpectedCondition

      • 隐式等待是指当试图查找一个或多个元素时,如果这些元素不立即可用,则告诉WebDriver在一定时间内轮询DOM。默认设置为0。设置后,将为WebDriver对象实例的生命周期设置隐式等待。下面是隐式等待的实现:

         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        
      • 这两个定义都是最完美的定义


        关于如何以及何时使用它们,有一个很好的解释。另外,还比较了隐式、显式和流畅的等待,值得一看。

        ToolsQA中的断开链接已被替换为:另一篇关于SeleniumWaits高级使用的重要文章如下:@virusrocks感谢链接,我用固定版本更新了帖子的链接
         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);