公司建立自己的网站吗,wordpress 转 html代码,重庆今天刚刚发生的新闻,移动互联网文章目录 前言一、简介及安装1. Selenium 简介2. Selenium 安装 二、Selenium 基本使用1. 导入Selenium2. 启动浏览器3. 打开网页4. 获取页面标题5. 关闭浏览器6. 完整示例代码 三、Selenium WebDriver1. 简介2. 基本操作2.1 启动浏览器2.2 关闭浏览器2.3 打开网页2.4 关闭当前… 文章目录 前言一、简介及安装1. Selenium 简介2. Selenium 安装 二、Selenium 基本使用1. 导入Selenium2. 启动浏览器3. 打开网页4. 获取页面标题5. 关闭浏览器6. 完整示例代码 三、Selenium WebDriver1. 简介2. 基本操作2.1 启动浏览器2.2 关闭浏览器2.3 打开网页2.4 关闭当前网页2.5 最大化窗口2.6 最小化窗口2.7 全屏模式2.8 页面前进和后退2.9 页面刷新2.10 获取页面标题2.11 获取当前页面URL 3. 元素查找3.1 通过ID查找3.2 通过Name查找3.3 通过Class Name查找3.4 通过Tag Name查找3.5 通过Link Text查找3.6 通过Partial Link Text查找3.7 通过CSS选择器查找3.8 通过XPath查找3.9 示例代码 4. 元素操作4.1 输入文本4.2 点击元素4.3 清除输入框文本4.4 获取和设置属性值4.5 获取文本内容4.6 判断元素是否可见、启用状态等4.7 复选框和单选框操作4.7.1 复选框操作4.7.2 单选框操作 4.8 下拉选择框操作4.9 滚动到元素位置4.10 截图4.11 鼠标操作4.12 键盘操作4.12.1 使用 send_keys 输入文本4.12.2 使用 ActionChains 执行复杂键盘操作4.12.3 特殊键支持 4.13 文件上传和下载操作4.13.1 文件上传4.13.2 文件下载 4.14 等待机制4.14.1 隐式等待 (Implicit Wait)4.14.2 显式等待 (Explicit Wait)4.14.3 手动等待 (Thread Sleep) 4.15 浏览器操作4.15.1 常用浏览器操作方法4.15.2 示例代码4.15.2.1 处理浏览器弹窗alert、confirm、prompt4.15.2.2 切换窗口和标签页4.15.2.3 操作 Cookies4.15.2.4 执行 JavaScript 4.16 无头浏览器模式4.16.1 配置Chrome为无头模式4.16.2 配置Firefox为无头模式4.16.3 配置Edge为无头模式注意事项 示例代码 前言
随着Web应用的日益复杂和普及确保其质量和用户体验变得至关重要。自动化测试作为软件开发周期中不可或缺的一部分能够有效提高测试效率、减少人为错误并加速产品的迭代过程。Selenium作为业界领先的Web应用测试工具提供了一套强大的API支持多种编程语言使得开发者和测试人员可以轻松地编写自动化测试脚本以模拟用户交互。
本文旨在为读者提供一个全面且详细的指南帮助你从零开始学习并掌握Selenium的基础知识及其高级功能。无论你是刚开始接触自动化测试的新手还是希望深入理解Selenium工作机制的经验丰富的开发者本书都将为你提供所需的知识和技术细节。我们将从Selenium的基本概念入手逐步介绍如何安装配置环境以及如何使用Selenium进行Web页面的基本操作如启动浏览器、打开网页、元素查找与操作等。
此外本文还将探讨一些更高级的主题包括但不限于处理各种类型的表单元素如复选框、单选框、下拉菜单、执行复杂的鼠标和键盘操作、文件上传下载、等待机制的应用、浏览器级别的操作如窗口管理、Cookie操作、以及无头模式的配置等。每个章节都配有详细的示例代码以便于读者更好地理解和实践所学内容。 一、简介及安装
1. Selenium 简介
Selenium是一个强大的工具集主要用于自动化Web浏览器的操作非常适合于Web应用程序的测试。它通过直接控制浏览器来执行测试脚本支持多种编程语言比如Java、C#、Python等从而可以模拟用户的实际操作如点击按钮、填写表单等。Selenium不仅限于某一种操作系统或浏览器因此它是跨平台和跨浏览器测试的理想选择。
Selenium的一个重要组成部分是Selenium WebDriver它提供了与浏览器直接交互的能力让开发者能够编写出模仿真实用户行为的测试用例。此外Selenium IDE作为一个Chrome和Firefox的插件为那些希望快速创建测试脚本而无需编写代码的人提供了一个图形界面。通过记录和回放用户在浏览器中的操作Selenium IDE简化了测试脚本的生成过程。
对于需要在多个环境上运行测试的情况Selenium Grid提供了解决方案。它可以让你在同一测试套件中针对不同的操作系统和浏览器组合并行地运行测试大大减少了总的测试时间。
Selenium因为其开源免费、拥有广泛社区支持以及几乎支持所有主流编程语言和浏览器的特点而受到欢迎。它可以非常逼真地模仿最终用户的行为这使得它成为进行功能测试、回归测试等方面的理想选择。不过对于初学者来说可能需要一些时间来熟悉其工作流程而且在处理动态内容或复杂的JavaScript驱动的应用程序时有时也需要额外的努力来确保测试的稳定性和可靠性。总之Selenium是一个非常灵活且强大的Web测试工具。
2. Selenium 安装
对于Python用户可以通过pipPython包管理工具来安装Selenium。
运行以下命令来安装Selenium
pip install selenium -i https://mirrors.aliyun.com/pypi/simple/二、Selenium 基本使用
1. 导入Selenium
首先需要导入Selenium库中的相关模块。这里主要用到的是webdriver模块它允许我们与浏览器进行交互。
from selenium import webdriver2. 启动浏览器
driver webdriver.Edge()3. 打开网页
使用get方法导航到特定的URL。
driver.get(https://www.baidu.com)4. 获取页面标题
要获取当前页面的标题可以使用title属性。
print(driver.title)5. 关闭浏览器
完成所有操作后通过调用quit()方法来关闭浏览器结束WebDriver会话。
driver.quit()6. 完整示例代码
from selenium import webdriverdriver webdriver.Edge()
driver.get(https://www.baidu.com)
print(driver.title)
driver.quit()三、Selenium WebDriver
1. 简介
Selenium WebDriver 是 Selenium 工具套件的一部分用于自动化Web浏览器的操作。与 Selenium IDE 不同WebDriver 提供了编程接口允许用户使用他们选择的编程语言如 Python、Java、C# 等来创建测试脚本。WebDriver 通过直接控制浏览器的行为能够更灵活和精确地模拟真实用户的交互支持多种浏览器包括 Chrome、Firefox、Edge 和 Safari 等。
2. 基本操作
2.1 启动浏览器
在开始使用 WebDriver 前需要根据使用的编程语言导入相应的库并启动对应的浏览器实例。
from selenium import webdriver# 启动Edge浏览器
driver webdriver.Edge()# 启动Chrome浏览器
# driver webdriver.Chrome()# 启动Firefox浏览器
# driver webdriver.Firefox()# 启动Safari浏览器
# driver webdriver.Safari()# 启动Ie浏览器
# driver webdriver.Ie()2.2 关闭浏览器
driver.quit()2.3 打开网页
使用 get 方法导航到特定的 URL。
driver.get(https://www.baidu.com)2.4 关闭当前网页
driver.close()2.5 最大化窗口
driver.maximize_window()2.6 最小化窗口
driver.minimize_window()2.7 全屏模式
driver.fullscreen_window()2.8 页面前进和后退
# 打开百度网页
driver.get(https://www.baidu.com)
# 打开搜狗网页
driver.get(https://www.sogou.com)
# 返回百度
driver.back()
# 前进到搜狗
driver.forward()2.9 页面刷新
driver.refresh()2.10 获取页面标题
title driver.title2.11 获取当前页面URL
url driver.current_url3. 元素查找
在使用Selenium进行Web自动化测试时元素定位是非常关键的一个步骤。正确地定位到页面上的元素是执行点击、输入文本等交互操作的前提。Selenium提供了多种方法来定位页面中的元素下面介绍这些方法。
3.1 通过ID查找
如果页面元素具有唯一的id属性那么这是最简单和推荐的方式之一。每个元素的id应该是独一无二的。
element driver.find_element(By.ID, element_id)3.2 通过Name查找
如果元素没有id或想通过name属性来定位可以使用这种方法。不过一个页面中可能存在多个相同name的元素。
element driver.find_element(By.NAME, element_name)3.3 通过Class Name查找
可以通过元素的class属性来定位元素。注意如果多个元素共享相同的类名则此方法可能返回多个匹配项。
elements driver.find_elements(By.CLASS_NAME, class_name) # 返回一个列表3.4 通过Tag Name查找
根据HTML标签名如div、a来查找元素。通常用于获取一组类似元素。
elements driver.find_elements(By.TAG_NAME, tag_name) # 返回所有匹配的元素列表3.5 通过Link Text查找
适用于定位链接(a标签)。可以根据链接文本精确匹配。
element driver.find_element(By.LINK_TEXT, link_text)3.6 通过Partial Link Text查找
与LINK_TEXT类似但是允许部分匹配链接文本。
element driver.find_element(By.PARTIAL_LINK_TEXT, partial_link_text)3.7 通过CSS选择器查找
CSS选择器是一种非常强大且灵活的方式来定位元素。它可以基于元素的ID、类、类型、属性等进行定位。
element driver.find_element(By.CSS_SELECTOR, css_selector)例如要找到一个拥有特定类的按钮可以这样写
element driver.find_element(By.CSS_SELECTOR, .button_class)3.8 通过XPath查找
XPath是一种在XML文档中查找信息的语言同样适用于HTML文档。它能够以复杂的方式定位元素包括层级关系、属性值等。
element driver.find_element(By.XPATH, xpath_expression)例如要找到一个具有特定属性值的输入框可以这样写
element driver.find_element(By.XPATH, //input[typetext and nameusername])3.9 示例代码
编写测试的html代码并保存为demo.html文件。
!DOCTYPE html
html langen
headmeta charsetUTF-8titleSelenium Test Page/title
/head
body
h1 idmainTitle欢迎来到Selenium测试页面/h1!-- 通过ID查找 --
input typetext idsearchBox placeholder输入搜索关键词!-- 通过Name查找 --
input typepassword namepwd placeholder请输入密码!-- 通过Class Name查找 --
button classbtn-submit提交/button
button classbtn-reset重置/button!-- 通过Tag Name查找 --
p这是一个段落。/p
p这是另一个段落。/p!-- 通过Link Text查找 --
a hrefhttps://www.example.com target_blank更多示例/a!-- 通过Partial Link Text查找 --
a hrefhttps://www.selenium.dev target_blank访问Selenium官网/a!-- 通过CSS选择器查找 --
div classcontent-boxp这是一个使用CSS选择器可定位的内容。/p
/div!-- 通过XPath查找 --
formlabel forfirstName名字:/labelinput typetext idfirstName namefirstNamebrbrlabel forlastName姓氏:/labelinput typetext idlastName namelastNamebrbrinput typesubmit value提交表单
/formscript// JavaScript代码可以在这里添加用于动态生成内容或处理用户交互
/script
/body
/htmlSelenium 示例代码如下
from selenium import webdriver
from selenium.webdriver.common.by import Bydriver webdriver.Edge()try:# 打开测试页面driver.get(rD:\ProjectCode\untitled\selenium\demo.html)# 通过ID查找元素element_by_id driver.find_element(By.ID, mainTitle)print(找到通过ID定位的元素:, element_by_id.text)# 通过Name查找元素element_by_name driver.find_element(By.NAME, pwd)print(找到通过Name定位的元素:, element_by_name.get_attribute(placeholder))# 通过Class Name查找元素elements_by_class_name driver.find_elements(By.CLASS_NAME, btn-submit)print(找到通过Class Name定位的元素:, elements_by_class_name)# 通过Tag Name查找元素elements_by_tag_name driver.find_elements(By.TAG_NAME, p)print(找到通过Tag Name定位的元素:, elements_by_tag_name)# 通过Link Text查找元素element_by_link_text driver.find_element(By.LINK_TEXT, 更多示例)print(找到通过Link Text定位的元素:, element_by_link_text)# 通过Partial Link Text查找元素element_by_partial_link_text driver.find_element(By.PARTIAL_LINK_TEXT, 访问Selenium官网)print(找到通过Partial Link Text定位的元素:, element_by_partial_link_text)# 通过CSS Selector查找元素element_by_css_selector driver.find_element(By.CSS_SELECTOR, .content-box)print(找到通过CSS Selector定位的元素文本:, element_by_css_selector.text)# 通过XPath查找元素element_by_xpath driver.find_element(By.XPATH, //input[idfirstName])print(找到通过XPath定位的元素:, element_by_xpath)finally:# 关闭浏览器driver.quit()打印结果如下图所示 4. 元素操作
4.1 输入文本
向输入框中输入文本可以使用send_keys()方法。
input_box driver.find_element(By.NAME, wd)
input_box.send_keys(风景图片)4.2 点击元素
点击操作是最常用的交互之一可以通过click()方法来实现。
element driver.find_element(By.ID, su)
element.click()4.3 清除输入框文本
在输入文本之前可能需要先清除输入框中的默认文本或已有内容这时可以使用clear()方法。
input_box.clear()4.4 获取和设置属性值 获取属性值可以使用get_attribute()方法来获取元素的特定属性值。 value element.get_attribute(value)设置属性值通常不直接通过Selenium进行但可以通过JavaScript执行 driver.execute_script(arguments[0].setAttribute(attribute_name, attribute_value), element)4.5 获取文本内容
获取元素内部的文本内容可以使用text属性。
setting driver.find_element(By.CSS_SELECTOR, #u a.pf)
setting_text setting.text4.6 判断元素是否可见、启用状态等 判断元素是否显示使用is_displayed()方法检查元素是否对用户可见。 if element.is_displayed():print(元素是可见的)判断元素是否启用使用is_enabled()方法检查元素是否处于可用状态例如按钮是否可点击。 if element.is_enabled():print(元素是启用状态)判断复选框或单选按钮是否被选中使用is_selected()方法检查复选框或单选按钮的状态。 if element.is_selected():print(元素已被选中)4.7 复选框和单选框操作
4.7.1 复选框操作
# 使用ID定位方式查找页面上的复选框元素假设其ID为checkbox-id
checkbox_element driver.find_element(By.ID, checkbox-id)# 检查该复选框是否未被选中
if not checkbox_element.is_selected():# 如果复选框未被选中则点击它以选中checkbox_element.click()4.7.2 单选框操作
# 通过ID定位方式查找页面上的单选按钮元素这里假设其ID为radio-button-id
radio_button_element driver.find_element(By.ID, radio-button-id)# 检查该单选按钮是否未被选中
if not radio_button_element.is_selected():# 如果单选按钮未被选中则点击它以选中radio_button_element.click()4.8 下拉选择框操作
# 从selenium.webdriver.support.ui模块导入Select类用于处理下拉选择框
from selenium.webdriver.support.ui import Select# 使用ID定位方式查找页面上的下拉菜单元素这里假设其ID为dropdown-id
dropdown_element driver.find_element(By.ID, dropdown_id)# 使用找到的下拉菜单元素初始化一个Select对象以便使用Select类提供的便捷方法来操作下拉菜单
select Select(dropdown_element)# 根据显示的文本选择选项。这里选择显示文本为选项1的选项
select.select_by_visible_text(选项1)# 根据选项的value属性值选择选项。这里选择value属性值为1的选项
select.select_by_value(1)# 根据选项在下拉列表中的索引位置选择选项。这里选择索引为0的第一个选项索引从0开始计数
select.select_by_index(0)4.9 滚动到元素位置
有时需要滚动页面直到某个元素进入视图中这可以通过JavaScript执行来完成。
driver.execute_script(arguments[0].scrollIntoView(true);, element)4.10 截图
可以对整个页面或特定元素进行截图保存。 对整个页面截图 driver.save_screenshot(screenshot.png)对特定元素截图 element.screenshot(element_screenshot.png)4.11 鼠标操作
在Selenium中鼠标操作是通过ActionChains类来实现的。这个类提供了一系列的方法来模拟各种鼠标操作如点击、双击、右击、拖拽等。
以下是一些常见的鼠标操作及其使用方法 导入ActionChains 在执行任何鼠标操作之前首先需要从selenium.webdriver.common.action_chains模块中导入ActionChains类。 from selenium.webdriver.common.action_chains import ActionChains初始化ActionChains对象 创建一个ActionChains对象该对象需要传入一个浏览器驱动实例。 actions ActionChains(driver)常用鼠标操作 点击Click: 点击一个元素。 element driver.find_element(By.ID, element_id)
actions.click(element).perform()右键点击Context Click: 在某个元素上执行右键点击。 element driver.find_element(By.ID, element_id)
actions.context_click(element).perform()双击Double Click: 双击一个元素。 element driver.find_element(By.ID, element_id)
actions.double_click(element).perform()悬停Move to Element: 将鼠标移动到某个元素上。 element driver.find_element(By.ID, element_id)
actions.move_to_element(element).perform()拖放Drag and Drop: 从一个位置拖动元素并释放到另一个位置。 source_element driver.find_element(By.ID, source_id)
target_element driver.find_element(By.ID, target_id)
actions.drag_and_drop(source_element, target_element).perform()执行动作 所有的动作链都需要通过调用.perform()方法来执行。这意味着你可以先定义一系列的动作然后一次性执行它们。 链式调用 ActionChains支持链式调用即可以连续调用多个方法最后通过.perform()来执行所有动作。 actions.move_to_element(element).click().double_click().context_click().perform()4.12 键盘操作
在Selenium中键盘操作主要通过ActionChains类和send_keys方法来实现。这些工具允许你模拟各种键盘输入事件包括简单的文本输入以及组合键的使用。
以下是一些常见的键盘操作及其使用方式
4.12.1 使用 send_keys 输入文本
直接向一个元素发送文本输入是最基本的键盘操作之一。这通常用于输入框、文本域等元素。
element driver.find_element(By.ID, input_field_id)
element.send_keys(Hello, World!)4.12.2 使用 ActionChains 执行复杂键盘操作
对于更复杂的键盘操作如按下或释放特定按键可以使用ActionChains类。 导入 ActionChains: from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys执行组合键操作: 比如要执行CtrlA全选和CtrlC复制这样的组合键操作 actions ActionChains(driver)
# 开始构建一系列的键盘操作
# 首先按下Ctrl键不放
# 然后发送a键模拟全选操作CtrlA
# 最后释放Ctrl键
actions.key_down(Keys.CONTROL).send_keys(a).key_up(Keys.CONTROL).perform()
actions.key_down(Keys.CONTROL).send_keys(c).key_up(Keys.CONTROL).perform()其他常见操作: 按下并释放某个键:actions ActionChains(driver)
actions.send_keys(Keys.ENTER).perform() # 按下回车键按住Shift键并输入:actions ActionChains(driver)
actions.key_down(Keys.SHIFT).send_keys(hello).key_up(Keys.SHIFT).perform()4.12.3 特殊键支持
Selenium通过Keys类提供了多种特殊键的支持比如Keys.RETURN回车键、Keys.TABTab键、Keys.ESCAPEEsc键等你可以根据需要选择合适的特殊键进行操作。
特殊键描述Keys 类常量回车键EnterKeys.RETURN 或 Keys.ENTERTab 键Keys.TABEsc 键Keys.ESCAPE空格键Keys.SPACE向上方向键Keys.ARROW_UP 或 Keys.UP向下方向键Keys.ARROW_DOWN 或 Keys.DOWN向左方向键Keys.ARROW_LEFT 或 Keys.LEFT向右方向键Keys.ARROW_RIGHT 或 Keys.RIGHT删除键DeleteKeys.DELETE退格键BackspaceKeys.BACK_SPACE插入键InsertKeys.INSERTHome 键Keys.HOMEEnd 键Keys.ENDPage Up 键Keys.PAGE_UPPage Down 键Keys.PAGE_DOWNF1 至 F12 功能键Keys.F1 至 Keys.F12Ctrl 键Keys.CONTROLShift 键Keys.SHIFTAlt 键Keys.ALT
4.13 文件上传和下载操作
在Selenium中处理文件上传和下载是Web自动化测试的重要组成部分。下面将分别介绍如何使用Selenium进行文件上传和下载的操作。
4.13.1 文件上传
对于文件上传操作通常涉及到与网页上的文件输入元素input typefile交互。以下是实现步骤 定位文件输入元素: 使用适当的定位策略如ID、名称等找到页面上的文件输入框。 file_input driver.find_element(By.ID, fileUploadId)发送文件路径: 利用send_keys方法向该元素发送要上传的文件的完整路径。 file_input.send_keys(/path/to/your/file.txt)示例代码:
from selenium import webdriver
from selenium.webdriver.common.by import Bydriver webdriver.Chrome() # 或其他WebDriver
driver.get(http://example.com/upload) # 打开目标网页# 定位文件上传输入框并发送文件路径
file_input driver.find_element(By.ID, fileUploadId)
file_input.send_keys(/absolute/path/to/your/file.txt)# 可以继续执行提交表单或其他操作4.13.2 文件下载
Selenium本身并不直接支持文件下载的管理因为它是设计用来模拟用户与网页交互的工具而不是用于处理浏览器下载行为的。然而可以通过以下几种方式来间接实现文件下载功能 配置浏览器设置 在启动浏览器之前可以配置浏览器的偏好设置或选项来自动下载某些类型的文件到指定位置而无需提示。 Chrome 示例: from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# 初始化Options对象用于设置Chrome或Edge浏览器的启动参数
chrome_options Options()
# 设置浏览器偏好设置
prefs {# 指定默认的文件下载路径。请确保路径存在且程序有权限写入。download.default_directory: /path/to/download/directory,# 设置为False以禁用下载提示框这样文件会自动下载到默认目录而不询问用户。download.prompt_for_download: False,# 提供升级下载目录的帮助程序通常保持为True即可。download.directory_upgrade: True,# 启用安全浏览保护。根据需求启用或禁用。safebrowsing.enabled: True
}
# 将偏好设置添加到chrome_options中
chrome_options.add_experimental_option(prefs, prefs)
driver webdriver.Chrome(optionschrome_options)
# 打开包含文件下载链接的目标网页
driver.get(http://example.com/download)触发下载动作 通过点击下载链接或按钮来触发文件下载。由于已经配置了下载目录文件将会自动下载到指定位置。 download_link driver.find_element(By.ID, downloadLink)
download_link.click()检查文件是否成功下载 下载完成后可能需要额外的逻辑来验证文件是否已成功下载比如检查文件是否存在、大小是否符合预期等。
4.14 等待机制
在使用Selenium进行Web自动化测试时等待机制是确保脚本稳定性和可靠性的关键因素之一。由于页面加载和元素渲染的时间可能不同直接操作未完全加载的元素会导致错误。Selenium提供了两种主要的等待机制隐式等待和显式等待。
4.14.1 隐式等待 (Implicit Wait)
隐式等待是对整个WebDriver会话设置的一个全局等待时间。如果在指定时间内网页没有加载完成或特定元素尚未出现WebDriver将继续轮询DOM直到元素变得可用或超时。 如何使用: from selenium import webdriverdriver webdriver.Chrome() # 或其他WebDriver实例
# 设置隐式等待时间为10秒
driver.implicitly_wait(10) # 参数为等待的秒数优点: 简单易用只需设置一次即可应用于所有查找元素的操作。 缺点: 如果页面上的某些元素比设定的时间更早出现仍需等待至设定的最大时间可能导致不必要的延迟。
4.14.2 显式等待 (Explicit Wait)
显式等待允许针对特定条件进行等待只有当该条件满足时才会继续执行后续代码或者在超过最大等待时间后抛出异常。这种方式更加灵活且高效。 常用方法: WebDriverWait: 结合ExpectedConditions用于检查特定条件是否成立。 示例代码: from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECdriver webdriver.Chrome() # 或其他WebDriver实例driver.get(http://example.com)
try:# 使用WebDriverWait等待最多10秒直到找到ID为element_id的元素element WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, element_id)))
finally:driver.quit()ExpectedConditions
在Selenium中ECexpected_conditions预期条件模块封装了网页自动化测试中常用的方法用于判断页面元素或页面状态是否满足特定条件以下是一些常用方法介绍
标题判断类 title_is用于判断当前页面的title是否完全等于预期字符串返回布尔值。例如判断当前页面标题是否为“百度一下你就知道”。title_contains判断当前页面的title是否包含预期字符串返回布尔值。 元素存在判断类 presence_of_element_located判断某个元素是否被加到了DOM树里不代表该元素一定可见。使用时需传入元素定位元组如(By.ID, ‘element_id’)。presence_of_all_elements_located判断是否至少有1个元素存在于DOM树中。例如判断页面上class为’column-md-3’的元素是否至少有一个存在。 元素可见性判断类 visibility_of_element_located判断某个元素是否可见可见代表元素非隐藏并且元素的宽和高都不等于0 需传入元素定位元组。visibility_of与visibility_of_element_located功能相同只是直接传入定位到的element对象。invisibility_of_element_located判断某个元素是否不存在于DOM树或不可见。 元素文本判断类 text_to_be_present_in_element判断某个元素中的text是否包含了预期的字符串。text_to_be_present_in_element_value判断某个元素中的value属性是否包含了预期的字符串。 frame操作类 frame_to_be_available_and_switch_to_it判断该frame是否可以切换进去如果可以返回True并且切换进去否则返回False。 元素可操作判断类 element_to_be_clickable判断某个元素是否可见并且是enabled的即可点击状态。staleness_of等待某个元素从DOM树中移除返回True或False。 元素选中状态判断类 element_to_be_selected判断某个元素是否被选中一般用于下拉列表等。element_selection_state_to_be判断某个元素的选中状态是否符合预期需传入定位到的element对象。element_located_to_be_selected判断特定元素是否存在于DOM树并被选中传入元素定位元组。element_located_selection_state_to_be与element_selection_state_to_be作用相同只是传入元素定位元组。 弹窗判断类 alert_is_present判断页面上是否存在alert弹窗。
4.14.3 手动等待 (Thread Sleep)
虽然可以使用Python的time.sleep()方法来实现简单的线程休眠作为等待手段但这通常不是最佳实践因为它会造成固定的等待时间无论实际需要与否可能会增加不必要的测试运行时间。 不推荐的方式: import timetime.sleep(5) # 强制等待5秒4.15 浏览器操作
Selenium不仅可以操作网页元素还可以控制浏览器本身的行为。
4.15.1 常用浏览器操作方法
操作类型方法说明打开新窗口execute_script(window.open(URL);) 使用JavaScript打开新窗口。切换窗口switch_to.window(window_handle) 切换到指定的窗口句柄。关闭窗口close() 关闭当前窗口。最大化窗口maximize_window() 最大化浏览器窗口。设置窗口大小set_window_size(width, height) 设置浏览器窗口的大小。全屏模式fullscreen_window() 将浏览器窗口设置为全屏模式。打开网页get(url) 打开指定的URL。前进和后退back() 和 forward() 返回上一个页面或前进到下一个页面。刷新页面refresh() 刷新当前页面。处理Alert弹窗switch_to.alert 结合 accept() 或 dismiss() 处理Alert弹窗点击确认或取消。添加Cookieadd_cookie(cookie_dict) 添加指定的Cookie。获取Cookieget_cookie(name) 或 get_cookies() 获取指定Cookie或所有Cookies。删除Cookiedelete_cookie(name) 或 delete_all_cookies() 删除指定Cookie或所有Cookies。执行JavaScriptexecute_script(script) 执行指定的JavaScript代码。
4.15.2 示例代码
以下是一些具体的示例代码演示了如何进行上述操作。
4.15.2.1 处理浏览器弹窗alert、confirm、prompt
from selenium import webdriver
from selenium.webdriver.common.alert import Alertdriver webdriver.Chrome()# 打开网页
driver.get(https://example.com)# 触发 alert 弹窗
driver.execute_script(alert(这是一个 alert 弹窗);)# 切换到 alert 弹窗
alert Alert(driver)
print(alert.text) # 获取弹窗文本
alert.accept() # 点击确定按钮关闭弹窗# 关闭浏览器
driver.quit()4.15.2.2 切换窗口和标签页
from selenium import webdriverdriver webdriver.Chrome()# 打开第一个窗口
driver.get(https://example.com)# 打开第二个窗口
driver.execute_script(window.open(https://example.org);)# 获取所有窗口句柄
window_handles driver.window_handles# 切换到第二个窗口
driver.switch_to.window(window_handles[1])
print(driver.title) # 在第二个窗口中操作# 切换回第一个窗口
driver.switch_to.window(window_handles[0])# 关闭浏览器
driver.quit()4.15.2.3 操作 Cookies
from selenium import webdriverdriver webdriver.Chrome()# 打开网页
driver.get(https://example.com)# 添加 Cookie
driver.add_cookie({name: test, value: 123})# 获取所有 Cookies
cookies driver.get_cookies()
print(cookies)# 删除 Cookie
driver.delete_cookie(test)# 关闭浏览器
driver.quit()4.15.2.4 执行 JavaScript
from selenium import webdriverdriver webdriver.Chrome()# 打开网页
driver.get(https://example.com)# 执行 JavaScript 代码并获取返回值
result driver.execute_script(return document.title;)
print(result)# 关闭浏览器
driver.quit()4.16 无头浏览器模式
无头浏览器模式允许你在没有图形用户界面GUI的情况下运行浏览器。这对于在服务器环境中执行自动化测试、持续集成CI管道中使用Selenium非常有用因为它不需要显示输出可以节省资源并提高性能。以下是如何配置不同浏览器以无头模式运行的方法。
4.16.1 配置Chrome为无头模式
对于Chrome浏览器通过设置--headless选项来启用无头模式。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options# 初始化Chrome选项
chrome_options Options()# 添加无头模式参数
chrome_options.add_argument(--headless)# 如果需要还可以添加其他常用参数
chrome_options.add_argument(--disable-gpu) # 适用于Windows系统的额外参数
chrome_options.add_argument(window-size1920,1080) # 设置窗口大小# 使用配置好的选项启动Chrome WebDriver
driver webdriver.Chrome(optionschrome_options)# 打开网页
driver.get(http://www.example.com)# 输出页面标题验证是否正确加载
print(driver.title)# 关闭WebDriver
driver.quit()4.16.2 配置Firefox为无头模式
同样地也可以将Firefox配置为无头模式运行。
from selenium import webdriver
from selenium.webdriver.firefox.options import Options# 初始化Firefox选项
firefox_options Options()# 添加无头模式参数
firefox_options.add_argument(--headless)# 启动Firefox WebDriver
driver webdriver.Firefox(optionsfirefox_options)# 打开网页
driver.get(http://www.example.com)# 输出页面标题验证是否正确加载
print(driver.title)# 关闭WebDriver
driver.quit()4.16.3 配置Edge为无头模式
对于新版基于Chromium的Microsoft Edge浏览器可以通过设置--headless选项来启用无头模式。需要注意的是由于Edge也是基于Chromium内核因此它的配置方式与Chrome非常相似。
from selenium import webdriver
from selenium.webdriver.edge.options import Options# 初始化Edge选项
edge_options Options()# 添加无头模式参数
edge_options.add_argument(--headless)# 如果需要还可以添加其他常用参数
edge_options.add_argument(--disable-gpu) # 适用于某些系统的额外参数
edge_options.add_argument(window-size1920,1080) # 设置窗口大小# 使用配置好的选项启动Edge WebDriver
driver webdriver.Edge(optionsedge_options)# 打开网页
driver.get(http://www.example.com)# 输出页面标题验证是否正确加载
print(driver.title)# 关闭WebDriver
driver.quit()注意事项 系统兼容性: --disable-gpu 参数有时在Windows系统上是必需的以避免潜在的问题。根据你的实际运行环境决定是否添加此参数。 窗口大小: 在无头模式下默认窗口尺寸可能较小这可能影响到一些依赖于特定屏幕分辨率或元素布局的测试案例。因此建议明确设置一个合适的窗口大小。 性能优化: 启用无头模式可以显著提高执行效率特别是在CI/CD环境中因为它减少了资源消耗并加快了测试速度。
示例代码
from selenium import webdriver
from selenium.webdriver.common.by import By# 初始化Edge WebDriver实例
driver webdriver.Edge()# 打开指定的网页这里以百度为例
driver.get(https://www.baidu.com/)# 查找名称为wd的输入框元素百度搜索框
input_box driver.find_element(By.NAME, wd)# 在找到的输入框中输入文本 风景图片
input_box.send_keys(风景图片)# 查找ID为su的元素百度搜索按钮并点击该按钮进行搜索
element driver.find_element(By.ID, su)
element.click()# 清除输入框中的内容。注意这行代码在实际场景中可能不需要
# 因为在点击搜索后通常不再需要操作输入框。
input_box.clear()# 获取之前点击的元素搜索按钮的value属性值并打印出来。
# 注意通常搜索按钮的value属性不会包含有用的信息此步骤可能是为了演示如何获取属性值。
value element.get_attribute(value)
print(value)# 查找CSS选择器匹配的设置链接元素并获取其文本内容
setting driver.find_element(By.CSS_SELECTOR, #u a.pf)
setting_text setting.text
print(setting_text)# 关闭当前窗口
driver.close()# 退出浏览器并结束WebDriver会话。
driver.quit()