Web UI自动化测试是一种软件测试方法通过模拟用户行为自动执行Web界面的各种操作并验证操作结果是否符合预期从而提高测试效率和准确性。目的确保Web应用程序的界面在不同环境(如不同浏览器、操作系统)下都能正常工作。验证应用程序的功能是否符合需求规格说明书。提高测试效率减少重复劳动。提前发现潜在的缺陷降低修复成本。这里分享web端元素获取元素等待01元素获取为什么要学习获取元素信息的方法主要为了获取相关的信息进行断言判断自动化用例最终的执行结果。获取元素常用的方法size 获取元素的大小 返回的是一个字典里面包含 元素高度和宽度的值text 获取元素的文本内容get_attribute(attribute) 获取元素对应属性名称的属性值 attribute表示的是属性名is_displayed() 判断元素是否可见 返回值为true或者falseis_enabled() 判断元素是否可用返回值为true或者falseis_selected() 判断复选框或者单选框是否被选中返回值为true或者false示例代码# 导包 import time from selenium import webdriver from selenium.webdriver.common.by import By # 实例化浏览器驱动 driver webdriver.Chrome() # 打开百度网站 driver.get(https://www.baidu.com) # 最大化浏览器窗口 time.sleep(3) driver.maximize_window() # 获取百度输入框的大小 size driver.find_element(By.CLASS_NAME, s_ipt).size print(size) # 获取超链接hao123网站的文本内容 text driver.find_element_by_link_text(hao123).text print(text) # 获取超链接hao123网站的地址 address driver.find_element(By.LINK_TEXT, hao123).get_attribute(href) print(address) # 判断文库超链接是否可见,默认是False result driver.find_element(By.XPATH, //*[class s-bri c-font-normal c-color-t] ).is_displayed() print(文库超链接可见, result) # 判端百度一下按钮是否可用,默认是False result driver.find_element(By.ID, su).is_enabled() print(百度一下按钮可用, result) # 点击页面右上角【登录】按钮进入登录页面 driver.find_element(By.ID, s-top-loginbtn).click() # 注意需要等待几秒等待元素出现否则会报错 time.sleep(5) # 判断页面中阅读并接受前的复选框是否选中 result driver.find_element_by_css_selector(.pass-checkbox-input).is_selected() print(页面中阅读并接受前的复选框已选中, result) # 等待3S time.sleep(3) # 关闭浏览器窗口 driver.quit()02 元素等待元素等待是指在自动化测试过程中为了等待某个元素出现或者满足某种条件而暂停脚本执行的一种技术。在定位页面元素时如果没有找到该元素会在指定时间内一直等待的过程。以下是常用的三种元素等待类型隐式等待在一段时间内检查网页是否加载完成如果加载完成则进行下一步操作;如果在设置的时间内没有加载完成则会报超时加载。显式等待在指定的时间内等待某个特定元素的出现如果该元素在指定时间内出现则立即执行相应的操作;如果超过等待时间元素仍未出现则抛出异常。强制等待使用time.sleep()方法使程序在指定的时间内暂停执行。但如果等待时间设置过短元素可能还未加载完成程序会报错;如果等待时间设置过长会浪费时间降低代码整体的运行效率。2.1. 隐式等待概念在查找元素时自动等待一定的时间以确保元素已经加载完成。如果在定位过程中找到了元素直接返回该元素继续后面的操作如果超过了指定时间就会抛出 NoSuchElementException 异常。隐式等待实现方式:driver.implicitlty_wait(timeout) # timeout表示的是最长的等待时间 单位为S隐式等待的优点是简单易用只需要设置一次对所有的元素定位的方法都是有效的,不需要明确指定等待某个特定元素的出现。它适用于大多数情况但在某些复杂的网页结构或网络延迟较高的情况下可能需要使用显式等待来更精确地控制等待时间。代码示例​​​​​​​# 导包 import time from selenium import webdriver from selenium.webdriver.common.by import By # 实例化浏览器驱动 driver webdriver.Chrome() # 设置隐式等待时间为5秒 driver.implicitly_wait(5) # 打开要百度网站 driver.get(https://www.baidu.com) # 点击右上角设置点击搜索设置 driver.find_element(By.ID, s-usersetting-top).click() driver.find_element_by_link_text(搜索设置).click() # 注意下面这段代码如果设置等待时间为0就会报错 # 判断全部语言单选框是否被选中 driver.find_element_by_css_selector([for SL_0]).is_selected() # 等待3S time.sleep(3) # 退出浏览器驱动 driver.quit()2.2. 显示等待概念显示等待是指在执行某个操作之前等待特定条件的满足。例如定位指定元素时如果能找到该元素那么就直接返回该元素如果找不到那么每隔指定的时间再去定位该元素如果超出最长等待时间那么就抛出TimeOutException。其工作原理如下设置等待时间和条件指定一个等待时间和一个条件在规定时间内每隔一段固定时间查看下条件是否成立。检查条件是否成立如果条件在等待时间内成立程序将继续执行;否则将提示一个超时异常。显示等待的实现导入WebDriverWait等待类WebDriverWait(driver, timeout, poll_frequency0.5).until(lambda x:x.find_element(By.ID, userA))driver 指的是浏览器驱动对象timeout 表示的是最长等待时间poll_frequency 表示的是检测的间隔时间默认是0.5until until方法跟上匿名函数来实现元素定位。代码示例​​​​​​​# 导包 import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait # 实例化浏览器驱动 driver webdriver.Chrome() driver.maximize_window() # 打开测试网站 driver.get(https://www.baidu.com) # 点击右上角设置 driver.find_element(By.ID, s-usersetting-top).click() # 点击搜索设置 driver.find_element_by_link_text(搜索设置).click() # 显示等待判断全部语言单选框是否被选中 # element driver.find_element(By.CSS_SELECTOR, [for SL_0]).is_selected() 注意如果用这行代码代替下面一行代码会报错 element WebDriverWait(driver, 5, 0.5).until(lambda x: x.find_element(By.CSS_SELECTOR, [for SL_0])) result element.is_selected() print(全部语言单选框被选中, result) # 等待3S time.sleep(3) # 退出浏览器驱动 driver.quit()2.3. 强制等待强制等待就是让代码休眠不做任何的操作time.sleep(time) time单位为S常用的场景在 UI 自动化中一般在以下情况下可能需要使用强制等待网络延迟或加载缓慢当网络连接较慢或页面加载时间较长时元素可能需要一些时间才能完全显示或可用。在这种情况下强制等待可以给系统一些时间来完成加载。不稳定的环境或外部因素如果自动化测试在不稳定的环境中运行例如网络连接不稳定或系统资源有限强制等待可以提供一定的容错性以确保操作有足够的时间完成。已知的固定时间延迟(某些操作可能具有已知的固定时间延迟)例如在提交表单后等待服务器响应。在这种情况下使用强制等待可以模拟这种延迟。当要获取元素的文本内容时而元素的文本内容是需要通过后台接口请求并渲染的此时如果使用隐式等待或显示等待是没有办法获取到文本内容所以需要使用强制等待。当要操作的元素已经存在但是有其他的元素需要等待且与该操作的元素有业务关联如果使用隐式等待或显示等待对该元素进行操作的话是没有办法进行的也需要使用强制等待。代码示例(此代码仅为演示代码场景需根据实际场景进行判断)​​​​​​​# 导包 import time from selenium import webdriver from selenium.webdriver.common.by import By # 实例化浏览器驱动 driver webdriver.Chrome() driver.maximize_window() # 打开测试网站 driver.get(https://www.baidu.com) # 通过name定位到输入框并输入新闻 time.sleep(2) element driver.find_element(By.NAME, wd) element.send_keys(新闻) # 点击百度一下按钮 element driver.find_element(By.ID, su) element.click() time.sleep(3) # 退出浏览器释放资源 driver.quit()