`

WebDriver 显示等待和隐式等待

 
阅读更多
等待是在执行自动化任务一段时间后才继续下一步。

显示等待
一个显示等待是你定义的一段代码,用于等待某个条件发生然后再继续执行后续代码。最坏的一个例子当属Thread.sleep(),它用一段明确的等待时间作为条件。WebDriver有一些方便的方法可以帮助你写出按需等待的代码。WebDriverWait结合ExpectedCondition便是其中一种。

java
WebDriver driver = new FirefoxDriver(); driver.get("http://somedomain/url_that_delays_loading"); 
WebElement myDynamicElement = (new WebDriverWait(driver, 10)) .until(ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement"))); 


csharp
IWebDriver driver = new FirefoxDriver(); 
driver.Url = "http://somedomain/url_that_delays_loading"; 
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); IWebElement myDynamicElement = wait.Until<IWebElement>((d) => { return d.FindElement(By.Id("someDynamicElement")); }); 


python
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0 from selenium.webdriver.support import expected_conditions as EC # available since 2.26.0 ff = webdriver.Firefox() ff.get("http://somedomain/url_that_delays_loading") try: element = WebDriverWait(ff, 10).until(EC.presence_of_element_located((By.ID, "myDynamicElement"))) finally: ff.quit()


ruby
require 'rubygems' # not required for ruby 1.9 or if you installed without gem require 'selenium-webdriver' driver = Selenium::WebDriver.for :firefox driver.get "http://somedomain/url_that_delays_loading" wait = Selenium::WebDriver::Wait.new(:timeout => 10) # seconds begin element = wait.until { driver.find_element(:id => "some-dynamic-element") } ensure driver.quit end


这段代码会等待10秒直到抛出TimeoutException或者它找到了相关Element,在0-10秒返回该Element。默认情况下,WebDriverWait每500ms调用一次ExpectedCondition直到其成功返回。对于Boolean类型的ExpectedCondition而言,表示成功的返回值是true,而对于所有其他类型的ExpectedCondition而言则是非空返回值。

本例与第一个隐式等待 例子在功能上是等价的.

Expected Conditions
在自动化web浏览器时有一些常用的条件。下面列出了每个条件的实现。Java恰巧有方便的方法,因此您不需要自己编写一个ExpectedCondition类或为它们创建自己的实用程序包。

元素可点击–元素已显示并且可用。
java
WebDriverWait wait = new WebDriverWait(driver, 10); 
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("someid")));

python
from selenium.webdriver.support import expected_conditions as EC wait = WebDriverWait(driver, 10) element = wait.until(EC.element_to_be_clickable((By.Id,'someid')))

ExpectedConditions包 (Java) (Python) (.NET) 含有一组可同WebDriverWait一同使用的预定义条件。

隐式等待
隐式等待使得WebDriver在查找一个Element或者Element数组时,每隔一段特定的时间就会轮询一次DOM,如果Element或数组没有马上被发现的话。默认设置是0。一旦设置,这个隐式等待会在WebDriver对象实例的整个生命周期起作用。

java
WebDriver driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get("http://somedomain/url_that_delays_loading"); 
WebElement myDynamicElement = driver.findElement(By.id("myDynamicElement")); 


csharp
WebDriver driver = new FirefoxDriver(); driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10)); 
driver.Url = "http://somedomain/url_that_delays_loading"; 
IWebElement myDynamicElement = driver.FindElement(By.Id("someDynamicElement")); 


python
from selenium import webdriver ff = webdriver.Firefox() ff.implicitly_wait(10) # seconds ff.get("http://somedomain/url_that_delays_loading") myDynamicElement = ff.find_element_by_id("myDynamicElement") 


ruby
require 'rubygems' # not required for ruby 1.9 or if you installed without gem require 'selenium-webdriver' driver = Selenium::WebDriver.for :firefox 
driver.manage.timeouts.implicit_wait = 10 # seconds driver.get "http://somedomain/url_that_delays_loading" element = driver.find_element(:id => "some-dynamic-element") 

分享到:
评论

相关推荐

    Selenium (强制等待、隐式等待、显式等待)三类等待的作用

    在编写Selenium脚本时,我们常常需要处理页面加载的问题,这时就会涉及到三种主要的等待方式:强制等待、隐式等待和显式等待。 **1. 强制等待 (Forced Wait)** 强制等待是最基础的等待类型,它不考虑任何特定的页面...

    selenium_webdriver第一版爬虫利器

    显式等待需要开发者明确指定等待条件和等待时间,而隐式等待则是在全局范围内设置一个等待时长。 通过selenium还可以实现键盘和鼠标事件的模拟。这包括键盘按键、组合键的操作以及鼠标右键、双击、拖放等动作。这些...

    selenium WebDriver java 工具包

    此外,它还支持等待操作,如隐式等待和显式等待,确保在进行操作前元素已经加载完成。 Selenium WebDriver与JUnit或TestNG等测试框架结合使用,可以构建出结构化的自动化测试套件,方便管理和执行测试用例。同时,...

    selenium webdriver第三版

    5. 等待技术:为了处理页面加载延迟,可以使用隐式等待`implicitly_wait()`和显式等待`WebDriverWait()`来确保元素可见或可交互。 四、高级功能 1. 并行测试:Selenium Grid允许在多台机器上并行执行测试,提高测试...

    selenium webdriver基于python源码案例.zip

    5. **等待技术**:讲解显式等待(`WebDriverWait`)和隐式等待的概念,以及在实际测试中如何灵活运用它们,确保元素加载完成后再进行操作。 6. **异常处理**:介绍如何编写健壮的测试脚本,包括错误捕获和异常处理...

    selenium-webdriver

    4. **等待机制**:为了处理页面加载时间,Selenium提供了显式等待和隐式等待,确保元素在执行操作前已完全加载。 5. **断言验证**:用于检查页面状态或元素属性,确保测试结果符合预期。 **Java API**: 在Java中,...

    selenium(webdriver)+python第三版

    Selenium提供了隐式等待和显式等待两种策略。隐式等待设置全局等待时间,而显式等待则更精确,可以指定等待某个条件满足后再执行下一步。 **7. 错误处理与日志记录** 在编写测试脚本时,应适当地加入异常处理,以...

    WebDriver C#版本

    WebDriver 是一个跨平台的自动化...WebDriver C#版本的使用涉及到许多细节和技巧,包括等待策略、隐式和显式等待、JavaScript执行、文件上传等。通过熟练掌握这些,你可以在C#环境中高效地进行网页应用的自动化测试。

    python WebDriver 弹出窗口

    - 在编写测试脚本时,应考虑到页面加载速度等因素,适当增加显式或隐式等待时间,以避免因页面未完全加载而导致的错误。 以上就是关于使用 Python WebDriver 处理弹出窗口的详细介绍。希望对大家有所帮助!

    selenium wait

    Selenium 等待机制详解 Selenium 等待机制是 Selenium 自动化测试中一个非常重要的概念,它...通过本文,我们了解了显式等待和隐式等待两种等待机制的使用场景和优缺点,并且掌握了如何使用它们来等待某个元素的出现。

    selenium webdriver

    WebDriver 提供了隐式等待和显式等待两种方式,帮助脚本等待特定条件满足后再执行下一步操作。 6. **断言与验证**:测试脚本通常需要验证预期的结果是否出现。WebDriver 提供了assert和verify方法,用于确认页面...

    selenium-Waits-等待.pdf

    隐式等待和显式等待的区别在于它们的工作方式和灵活性: 隐式等待(Implicit Waits)设置一个全局等待时间,在这个时间范围内,Selenium WebDriver会自动等待指定的时间,直到元素出现在DOM中。如果在指定时间范围...

    webdriver实用指南python版本.pdf

    WebDriver提供了显式等待和隐式等待两种方式。 - **示例代码(显式等待):** ```python from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from ...

    selenium_webdriver学习

    比如,使用`implicitly_wait`设置隐式等待,等待页面元素加载完成;使用`switch_to.frame()`切换到iframe;使用`switch_to.alert`处理弹窗;使用try-except语句捕获和处理可能出现的错误。 在软件测试中,Selenium ...

    selenium webdriver (python) 第一版

    为了提高脚本的健壮性,文档还讲解了如何为自动化脚本添加等待时间,包括显式等待和隐式等待。显式等待允许脚本等待某个条件成立后再继续执行,而隐式等待则在查找元素时给予一定的时间间隔。 文档进一步展示了如何...

    Selenium WebDriver 基础学习手册,java和python语言.zip

    - 等待策略包括显式等待`WebDriverWait`和隐式等待`driver.manage().timeouts().implicitlyWait()`. 这些等待机制确保元素在执行操作前已加载完成。 6. **测试框架集成** - Java中,可以结合JUnit或TestNG进行...

Global site tag (gtag.js) - Google Analytics