【UI自动化测试】9_web自动化测试 _元素等待

📅 发布时间:2026/7/12 15:03:24 👁️ 浏览次数:
【UI自动化测试】9_web自动化测试 _元素等待
文章目录一、元素等待二、隐式等待重要2.1 隐式等待-案例2.2 隐式等待-总结三、显式等待 移动端测试多用3.1 显式等待方法3.2 显式等待-案例四、强制等待五、等待对比一、元素等待元素等待在定位页面元素时如果未定位到 会在指定时间内一直等待的过程1、什么是等待?代码执行过程中第一次未找到元素先不抛出异常。激活等待时间在等待过程中如果找到元素就执行。2、 为什么要等待?由于网络速度慢 或 电脑配置低 或者 服务器处理请求慢 等原因导致元素未加载出来而代码已执行会触发异常。3、元素等待类型- 隐式等待 - 显式等待 - 强制等待--time.seep(秒) 影响运行效率二、隐式等待重要隐式等待定位元素时 如果能定位到元素则直接返回该元素 不触发等待如果不能定位到该元素 则间隔一段时间后再去定位元素如果在达到最大时长时还没有找到指定元素 则抛出元素不存在的异常NoSuchElementException 。-说明隐式等待为全局设置只需要设置一次就会作用于所有元素-方法driver.implicitly_wait(timeout)# (timeout为等待最大时长单位秒)-提示在项目中如果未封装自动化框架时推荐使用。2.1 隐式等待-案例fromseleniumimportwebdriverfromtimeimportsleepfromselenium.webdriver.common.byimportByfromselenium.webdriver.support.waitimportWebDriverWait# 1、获取浏览器驱动对象driverwebdriver.Chrome()# 2、将浏览器 最大化driver.maximize_window()# 3、设置隐式等待10秒。driver.implicitly_wait(10)# 打开一个网页driver.get(http://www.baidu.com)# 定位输入框--给一个错误的id不能找到如果直接抛出异常说明等待失效。如果在设置指定时长以外抛出说明等待生效。# driver.find_element_by_css_selector(#chat-textarea).send_keys(你爱我)driver.find_element(By.CSS_SELECTOR,#chat-textarea).send_keys(你爱我)# 暂停 2sleep(2)# 关闭驱动对象driver.quit()2.2 隐式等待-总结方法driver.implicitly_wait(30)# 一般情况下设置30秒特色1.针对所有元素生效。2.一般情况下为前置必写代码(1.获取浏览器驱动对象2.最大化浏览器3.设置隐式等待)三、显式等待 移动端测试多用显式等待定位指定元素时 如果能定位到元素则直接返回该元素 不触发等待如果不能定位到该元素 则间隔一段时间后再去定位元素如果在达到最大时长时还没有找到指定元素 则抛出超时异常TimeoutException 。说明:针对单个元素生效可以修改查找频率和超时时间。 特点︰查找并返回元素3.1 显式等待方法在Selenium中把显式等待的相关方法封装在WebDriverWait类中 。fromselenium.webdriver.common.byimportBy# 1.导包 等待类fromselenium.webdriver.support.waitimportWebDriverWait# 2.创建显示等待类对象WebDriverWait(driver,timeout,poll_frequency0.5)1).driver 浏览器驱动对象2).timeout 超时的时长单位秒3).poll_frequency 检测间隔时间默认为0.5秒# 3.调用方法until(method) 直到...时1).method 函数名称 该函数用来实现对元素的定位2).一般使用匿名函数来实现lambdax:x.find_element(By.CSS_SELECTOR,#chat-textarea)3)x:x为driver,它是WebDriverWait类将传入的driver赋值给类self._driveruntil方法调用了self._driver;# 4. 整体实现,返回的一个元素。elementWebDriverWait(driver,10,1).until(lambdax:x.find_element(By.CSS_SELECTOR,#chat-textarea))element.send_keys(你爱我)3.2 显式等待-案例fromtimeimportsleepfromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.support.waitimportWebDriverWait# 1、获取浏览器驱动对象driverwebdriver.Chrome()# 2、将浏览器 最大化driver.maximize_window()# 打开一个网页driver.get(http://www.baidu.com) # 定位输入框--给一个错误的id不能找到如果直接抛出异常说明等待失效。如果在设置指定时长以外抛出说明等待生效。 # 实例化WebDriverWait()并调用until方法 # 注意调用until方法返回的一定是一个元素 # 显示等待 - 返回查找到的元素# 定位延时加载输入框当找不到时抛出异常并捕获异常找到元素则直接输入try:elWebDriverWait(driver,10,0.5).until(lambdax:x.find_element(By.CSS_SELECTOR,#chat-textarea))# 注意此时el 还不是元素只有代码运行起来才是元素el.send_keys(你爱我)exceptExceptionase:print(显示等待定位超时)# 继续抛出异常raisee# 暂停 2sleep(2)# 关闭驱动对象driver.quit() # 获取 WebDriverWait示例对象 wait WebDriverWait(driver,timeout10, poll_frequency0.5) # 获取元素 el wait.until(lambda x:x.find_element_by_id(#chat-textarea)) # 发送内容 el.send_keys(你爱我) 四、强制等待语法sleep(10)提示执行到这句必须等待10秒不灵活。fromtimeimportsleep sleep(10)五、等待对比隐式等待依赖于界面元素的加载影响。比如第一次打开页面有时受网络影响页面始终处于转圈加载的状态加载界面所有的信息有可能定位登录按钮已经早都加载显示出来但是其他元素还没有加载完毕其它元素没有出来和登录按钮没有关系登录按钮出来就想做点击然后跳转到登录页面。原有的隐式等待受整个页面加载的影响即使出现想要的元素也不点击要等待所有的元素加载完毕这影响了测试用例运行的效率。因此要加上显示等待。