Selenium 是目前使用最广泛的 Web 应用程序自动化测试的开源框架。

如果您想成为使用Selenium WebDriver的专家,最重要的技能之一就是学会使用Wait命令。它对于执行测试脚本非常重要,有助于动态识别和解决与页面元素中的时间延迟相关的问题。

本文将详细讲解如何使用 Selenium 中的 Wait 函数,及其三种等待模式 – 隐式、显式和流式的使用技巧。

Selenium中的等待命令是什么?

等待是Selenium中的命令,对于执行自动化测试脚本非常重要。在网站的自动化测试过程中,由于加载页面元素的时间间隔不同,可能会出现各种各样的问题。等待命令有助于观察和排除这些问题。

当一个页面加载到浏览器上时,其中的各种页面元素可能会以不同的时间间隔动态加载。等待命令的作用是使测试脚本在抛出ElementNotVisibleException 异常之前暂停一段时间。这使 WebDriver 能够检查该页面元素是否存在/可见/可点击,再判断是否触发脚本执行失败。

为什么需要等待?

大多数 Web 应用程序都是用 Ajax 和 Javascript 开发的。当一个页面加载到浏览器上时,各种页面元素可能会以不同的时间间隔加载,这显然使识别元素变得难上加难。如果等待命令使用不当,没有正确找到页面元素,那么脚本执行中过大的误报率将使自动化测试变得没有意义。合理使用 Selenium 等待命令有助于解决此问题。

Selenium WebDriver 提供了三个命令来实现动态等待:

  1. Implicit Wait
  2. Explicit Wait
  3. Fluent Wait

Implicit Wait

隐式等待使 Selenium WebDriver 在抛出异常之前等待一定的时间。一旦设置了隐式等待时间,WebDriver 将在异常发生之前等待元素,直到超出预定时间。

一旦设置了隐式等待时间,在当前浏览器实例中,所有的操作步骤都会遵循该时间。其默认设置为0,具体等待时间可以通过以下语法设置。

Copy to Clipboard
演示代码如下:
Copy to Clipboard

Explicit Wait

配置显式等待,可以使 WebDriver 等待某个条件成立以后,继而再继续执行测试脚本,如果在既定时间内条件仍无法满足,将会抛出异常使脚本失败。

设置显式等待对于那些需要更多时间加载的元素非常重要。比如我们设置了隐式等待,那么浏览器将在加载每个页面元素之前等待相同的时间。如果对于那些异步加载时间超出隐式等待时间的元素,我们可以单独为它设置显示等待,来延长等待时间。

在显式等待中可以使用以下等待条件。

  • alertIsPresent()
  • elementSelectionStateToBe()
  • elementToBeClickable()
  • elementToBeSelected()
  • frameToBeAvaliableAndSwitchToIt()
  • invisibilityOfTheElementLocated()
  • invisibilityOfElementWithText()
  • presenceOfAllElementsLocatedBy()
  • presenceOfElementLocated()
  • textToBePresentInElement()
  • textToBePresentInElementLocated()
  • textToBePresentInElementValue()
  • titleIs()
  • titleContains()
  • visibilityOf()
  • visibilityOfAllElements()
  • visibilityOfAllElementsLocatedBy()
  • visibilityOfElementLocated()

演示代码如下:

Copy to Clipboard

Fluent Wait

流式等待命令可以设置 Selenium WebDriver 等待特定条件出现的最长时间,还可以设置WebDriver在抛出“ElementNotVisibleException”之前检查条件是否出现的频率。

简单地说,流式等待定期重复查找页面元素,直到发生超时或找到对象为止。在使用流式等待时,可以根据需要设置默认的轮询周期,用户可以将等待配置为忽略轮询期间的任何异常。

Copy to Clipboard

结论

掌握 Selenium 等待命令的使用对于测试人员编写高效的测试自动化脚本至关重要。有效的实现等待可以大大简化自动化测试的过程、节省测试时间,并有助于检测页面上的异常,从而确保软件质量。

如果您对自动化测试感兴趣,请联系我们。