北京网站建设定制型报价,php初学者网站,上海今天新闻综合频道,咨询行业软件测试 —— 自动化测试#xff08;Selenium#xff09; 什么是SeleniumPython安装Selenium1.安装webdirver-manager2.安装Selenium 写一个简单用例CSS_SELECTOR和XPATH浏览器快速定位页面元素浏览器的前进#xff08;forward#xff09;#xff0c;后退#xff08;bac… 软件测试 —— 自动化测试Selenium 什么是SeleniumPython安装Selenium1.安装webdirver-manager2.安装Selenium 写一个简单用例CSS_SELECTOR和XPATH浏览器快速定位页面元素浏览器的前进forward后退back刷新refresh浏览器参数设置无头模式 页面加载策略 在测试过程当中尤其是对web页面的测试中有很多的步骤是重复且繁琐的这些步骤耗时耗力效率还非常低下。所以就有了自动化测试把人们从繁琐复杂的步骤中解放出来把这些工作交给代码。这里我们要介绍的Selenium就是用于web自动化测试
什么是Selenium
Selenium 是一个用于自动化Web浏览器操作的工具它允许你通过编写代码来控制浏览器执行一系列动作比如点击按钮、填写表单、导航页面等。Selenium 主要用于网页测试但它也可以被用来进行其他类型的网络爬虫或者自动化任务。
Selenium 支持多种编程语言包括 Java、C#、Python、Ruby、JavaScript (Node.js) 和 PHP。你可以使用这些语言中的任意一种来编写 Selenium 测试脚本或程序。
以下是 Selenium 的几个关键组件 Selenium WebDriver: 这是 Selenium 项目的核心部分提供了面向对象的 API 来控制不同的浏览器如 Chrome、Firefox、Edge 等。WebDriver 与浏览器直接交互可以模拟真实用户的操作。 Selenium IDE: 这是一个记录和回放工具主要用于快速创建简单的测试用例。它作为一个浏览器插件提供支持 Firefox 和 Chrome。 Selenium Grid: 它允许你在多个机器上并行运行测试从而大大缩短了测试时间。Grid 特别适合需要在不同环境操作系统和浏览器组合下测试的应用。 使用 Selenium 自动化 Web 应用时通常需要做以下几件事 安装相应的浏览器驱动例如 ChromeDriver 对于 Google Chrome。编写测试脚本选择你喜欢的编程语言并利用 WebDriver API 编写代码。执行测试这可以通过命令行、集成开发环境IDE或者是持续集成系统来完成。 Python安装Selenium
1.安装webdirver-manager
首先我们的浏览器有很多种像IE,谷歌火狐等等如果我们想操作不同的浏览器就要安装不同的驱动而且还要驱动还要符合相应的版本这是一个很麻烦的工作所以我们可以下载一个webdriver-manager这样无论我们是什么类型或者什么版本的浏览器他都会帮我们管理好省去了我们下驱动的时间。
Python安装webdriver-manager直接pip安装就行
pip install webdriver-manager2.安装Selenium
接下来就是pip安装selenium了这里我们安装4.0版本的库
pip install selenium4.0.0这样我们就安装好了selenium
写一个简单用例
打开Pychram创建一个新项目写下这几段代码
import time# 导入所需的 Selenium 模块
from selenium import webdriver
from selenium.webdriver.firefox.service import Service as FirefoxService # 创建Firefox WebDriver服务
from selenium.webdriver.common.by import By # 用于选择元素的定位策略
from webdriver_manager.firefox import GeckoDriverManager # 管理并自动下载适合的 GeckoDriver# 创建驱动对象即启动浏览器
# 使用 GeckoDriverManager 自动安装或更新与当前系统匹配的 GeckoDriver并获取其路径。
firefox_driver_path GeckoDriverManager().install()
# 创建一个 FirefoxService 对象指定使用的 GeckoDriver 路径。
service FirefoxService(firefox_driver_path)
# 使用创建的服务对象实例化一个 Firefox WebDriver 实例从而打开一个新的 Firefox 浏览器窗口。
driver webdriver.Firefox(serviceservice)# 发送URL即导航到目标网页
# 访问 bilibili 网站。
driver.get(https://www.bilibili.com/)# 找到搜索框输入关键词 小潮院长
# 使用 CSS_SELECTOR 定位页面上的搜索输入框并向其中发送字符串 小潮院长。
search_input driver.find_element(By.CSS_SELECTOR, .nav-search-input)
search_input.send_keys(小潮院长) # 输入搜索关键字
time.sleep(3) # 等待几秒以确保页面和元素加载完成# 点击搜索按钮
# 使用 CSS_SELECTOR 定位搜索按钮并模拟点击操作。
search_button driver.find_element(By.CSS_SELECTOR, .nav-search-btn svg:nth-child(1))
search_button.click() # 执行点击动作
time.sleep(3) # 等待几秒以确保搜索结果加载# 关闭浏览器
# 结束会话关闭所有由 WebDriver 打开的浏览器窗口。
driver.quit()# 注意在实际使用中应该考虑添加异常处理机制例如 try-except 块来捕获可能出现的错误
# 并且可能需要更智能的方法来等待元素加载比如使用显式等待WebDriverWait而不是简单的 sleep。这里我用的是火狐大家可以试试其他的浏览器。
CSS_SELECTOR和XPATH
在我们定位页面元素的时候我们可以用两种方式CSS_SELECTOR和XPATH
import timefrom selenium import webdriver
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.firefox import GeckoDriverManager# 创建驱动对象
FirefoxIns GeckoDriverManager().install()
driver webdriver.Firefox(serviceService(FirefoxIns))# 发送url
driver.get(https://www.bilibili.com/)# 找到搜索框输入小潮院长
driver.find_element(By.CSS_SELECTOR,.nav-search-input).send_keys(小潮院长)
time.sleep(3)# 点击搜索键
driver.find_element(By.CSS_SELECTOR,.nav-search-btn svg:nth-child(1)).click()
driver.find_element(By.XPATH,/html//body/div[2]/div[2]/div[1]/div[1]/div/div/form/div[2]/svg).click()
time.sleep(3)# 关闭浏览器
driver.quit()
这里的话XPATH大家了解一下我测试了一下用XPATH可能会找不到页面元素。
浏览器快速定位页面元素
现在我们知道了代码咋写但是我们怎么样知道元素在页面中的位置呢这里要用到浏览器的开发者工具快键键一般是F12。
假设我现在在b站的页面要定位搜索键的位置 点击F12进入开发者界面 点击左上角的小框 点完之后把鼠标挪到搜索图标就会自动定位这个图标的代码 右击点击复制选择CSS选择器 这样我们就可以得到在CSS选择器下图标的代码是多少。
浏览器的前进forward后退back刷新refresh
import time # 导入time模块用于使用sleep函数# 导入Selenium WebDriver相关的类和方法
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.firefox import GeckoDriverManager# 使用webdriver_manager自动管理Firefox的驱动程序GeckoDriver并安装适合的版本
FireFoxIns GeckoDriverManager().install()# 创建一个Firefox浏览器实例并指定服务为之前安装的GeckoDriver
driver webdriver.Firefox(serviceService(FireFoxIns))# 打开百度首页
driver.get(https://www.baidu.com/)# 定位搜索框元素使用CSS选择器匹配ID为kw的元素
serach_box driver.find_element(By.CSS_SELECTOR, #kw)# 在搜索框中输入搜索关键词
serach_box.send_keys(阮阮是个天才7)# 定位搜索按钮元素使用CSS选择器匹配ID为su的元素
click_button driver.find_element(By.CSS_SELECTOR, #su)
# 点击搜索按钮执行搜索
click_button.click()
# 暂停脚本3秒等待搜索结果页面加载
time.sleep(3)# 浏览器后退到上一页面
driver.back()
# 暂停脚本3秒观看后退效果
time.sleep(3)# 浏览器前进到下一页面
driver.forward()
# 暂停脚本2秒观看前进效果
time.sleep(2)# 刷新当前页面
driver.refresh()
# 暂停脚本2秒观看刷新效果
time.sleep(2)# 关闭浏览器并结束会话
driver.quit()浏览器参数设置
无头模式
无头模式Headless Mode是指浏览器在没有图形用户界面GUI的情况下运行。这种模式非常适合用于服务器端环境或不需要可视化输出的自动化测试场景因为它可以节省资源并加快执行速度。
在创建driver时带上-headless
options webdriver.ChromeOptions()
options.add_argument(-headless)
driver
webdriver.Chrome(serviceChromeService(ChromeDriverManager().install()),options
options)import timefrom selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.firefox import GeckoDriverManager# 使用webdriver_manager自动管理Firefox的驱动程序GeckoDriver并安装适合的版本
FireFoxIns GeckoDriverManager().install()# 创建一个 FirefoxOptions 对象用于存储选项并设置为无头模式即不显示浏览器窗口运行
options webdriver.FirefoxOptions()
options.add_argument(-headless)# 创建一个新的 Firefox 浏览器实例并传入配置好的 options 参数
driver webdriver.Firefox(serviceService(FireFoxIns), optionsoptions)# 设置全局隐式等待时间为10秒。这意味着在查找元素时如果没找到WebDriver会继续尝试最多10秒
driver.implicitly_wait(10)# 打开百度首页
driver.get(https://www.baidu.com/)# 定位搜索框元素使用CSS选择器匹配ID为kw的元素
serach_box driver.find_element(By.CSS_SELECTOR, #kw)# 在搜索框中输入搜索关键词
serach_box.send_keys(阮阮是个天才7)# 定位搜索按钮元素使用CSS选择器匹配ID为su的元素
click_button driver.find_element(By.CSS_SELECTOR, #su)
# 点击搜索按钮执行搜索
click_button.click()
# 暂停脚本3秒等待搜索结果页面加载
time.sleep(3)# 浏览器后退到上一页面
driver.back()
# 暂停脚本3秒观看后退效果
time.sleep(3)# 浏览器前进到下一页面
driver.forward()
# 暂停脚本2秒观看前进效果
time.sleep(2)# 刷新当前页面
driver.refresh()
# 暂停脚本2秒观看刷新效果
time.sleep(2)# 关闭浏览器并结束会话
driver.quit()页面加载策略
页面加载策略Page Load Strategy是 Selenium WebDriver 中用于控制浏览器如何加载网页的一种设置。它决定了 WebDriver 在执行脚本时等待页面加载完成的程度。不同的加载策略可以影响到测试的速度和稳定性。以下是三种可能的页面加载策略 normal默认 这是最完整的加载策略WebDriver 会等待整个页面完全加载完毕包括所有的子资源如图片、样式表等然后才继续执行下一步操作。这种方式确保了所有内容都已准备好但可能会导致较长的等待时间特别是对于那些有大量外部资源的页面。 eager 或者称为 interactive 当文档的内容已经加载完毕并且DOM树已经构建好但是像图片、样式表等其他资源还在加载中时WebDriver 就认为页面已经加载完成并开始执行下一步操作。使用这种方式可以在保证基本功能可用的同时减少等待时间提高测试效率。 none WebDriver 不会等待页面加载结束而是立即返回控制权给测试脚本。这意味着只要初始 HTML 文档被解析WebDriver 就不再关心后续资源是否加载完成。这种策略非常适合需要快速启动的场景但在这种情况下你必须自己处理任何与未加载资源相关的潜在问题。 options.page_load_strategy 加载⽅式options webdriver.ChromeOptions()
options.page_load_strategy eager
driver
webdriver.Chrome(serviceChromeService(ChromeDriverManager().install()),optionsoptions)import timefrom selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.firefox import GeckoDriverManager# 使用webdriver_manager自动管理Firefox的驱动程序GeckoDriver并安装适合的版本
FireFoxIns GeckoDriverManager().install()# 创建一个 FirefoxOptions 对象用于存储选项
options webdriver.FirefoxOptions()# 设置页面加载策略为 eager即交互式加载这样可以减少等待时间提高测试效率
# 页面内容加载完毕后不等待图片和样式表等资源加载完成就继续执行下一步操作
options.page_load_strategy eager# 创建一个新的 Firefox 浏览器实例并传入配置好的 options 参数
driver webdriver.Firefox(serviceService(FireFoxIns), optionsoptions)# 打开百度首页
driver.get(https://www.baidu.com/)# 定位搜索框元素使用CSS选择器匹配ID为kw的元素
serach_box driver.find_element(By.CSS_SELECTOR, #kw)# 在搜索框中输入搜索关键词
serach_box.send_keys(阮阮是个天才7)# 定位搜索按钮元素使用CSS选择器匹配ID为su的元素
click_button driver.find_element(By.CSS_SELECTOR, #su)
# 点击搜索按钮执行搜索
click_button.click()
# 暂停脚本3秒等待搜索结果页面加载
time.sleep(3)# 浏览器后退到上一页面
driver.back()
# 暂停脚本3秒观看后退效果
time.sleep(3)# 浏览器前进到下一页面
driver.forward()
# 暂停脚本2秒观看前进效果
time.sleep(2)# 刷新当前页面
driver.refresh()
# 暂停脚本2秒观看刷新效果
time.sleep(2)# 关闭浏览器并结束会话
driver.quit()