### Selenium高级自动化(图文教程)- 抢先版 #### 一、环境搭建与配置 **1.1 环境搭建** ##### 1.1.1 Selenium简介 Selenium 是一个强大的自动化测试工具,主要用于Web应用的测试,支持多种编程语言如Python、Java等。它能够模拟用户在浏览器中的各种操作,如点击按钮、输入文本等,并可以用于自动化执行一系列测试用例。 ##### 1.1.2 Python安装 Python 是一种广泛使用的高级编程语言,因其简洁的语法和丰富的库支持而备受欢迎。安装Python时,建议从官方网站下载最新稳定版,如Python 3.9.x或以上版本。安装过程中勾选“Add Python to PATH”选项以便于环境变量的配置。 ##### 1.1.3 环境变量配置 环境变量配置是确保系统能识别Python安装路径的关键步骤。具体步骤如下: - 打开“控制面板”>“系统和安全”>“系统”>“高级系统设置”>“环境变量”。 - 在“系统变量”下找到“Path”变量,点击“编辑”。 - 添加Python的安装路径以及Scripts目录到系统Path中。 ##### 1.1.4 安装Selenium 使用Python的包管理工具pip来安装Selenium: ``` pip install selenium ``` ##### 1.1.5 验证Selenium 安装完成后,可以通过Python脚本来验证Selenium是否成功安装: ```python from selenium import webdriver driver = webdriver.Chrome() driver.get("http://www.google.com") print(driver.title) driver.quit() ``` ##### 1.1.6 浏览器兼容性 Selenium支持多种浏览器,包括Chrome、Firefox、Edge等。不同浏览器需要对应的WebDriver驱动程序才能正常工作。 **1.2 pip降级Selenium 3.0** ##### 1.2.1 遇到问题 有时由于某些特定的需求,可能需要使用Selenium的旧版本。例如,如果项目中存在不兼容的代码或者依赖项,就需要考虑降级Selenium版本。 ##### 1.2.2 解决方案 使用pip命令可以轻松地降级到指定版本: ``` pip install selenium==3.0.0 ``` ##### 1.2.3 检查pip环境 确保pip环境正确无误非常重要,可以通过以下命令查看pip的版本信息: ``` pip --version ``` ##### 1.2.4 查看Selenium版本号 可以使用以下命令查看已安装的Selenium版本: ``` pip show selenium ``` ##### 1.2.5 pip降级Selenium 通过指定版本号来进行降级安装: ``` pip install selenium==3.0.0 ``` ##### 1.2.6 升级pip版本 如果需要更新pip到最新版本,可以使用以下命令: ``` pip install --upgrade pip ``` **1.3 解决pip使用异常** ##### 1.3.1 pip出现异常 pip偶尔会出现一些错误,比如网络问题导致的超时、版本冲突等。 ##### 1.3.2 解决办法 对于这些异常情况,可以尝试清理pip缓存、重新安装pip或者更换镜像源等方法解决。 ##### 1.3.3 配置环境变量 确保pip的可执行文件路径被正确添加到了系统的PATH环境变量中。 **1.4 Chrome浏览器(chromedriver)** ##### 1.4.1 Chrome遇到问题 在使用Chrome进行自动化测试时可能会遇到兼容性问题。 ##### 1.4.2 查看版本号 可以通过Chrome浏览器的帮助菜单来查看当前版本: 1. 打开Chrome浏览器。 2. 点击右上角的三个点图标,选择“帮助”>“关于Google Chrome”。 ##### 1.4.3 chromedriver ChromeDriver是Chrome浏览器的自动化工具,需要与Chrome浏览器版本保持一致。 ##### 1.4.4 各版本匹配表 官方提供了ChromeDriver与Chrome浏览器版本之间的匹配对照表,可以在[这里](https://sites.google.com/a/chromium.org/chromedriver/downloads)找到。 #### 二、WebDriver基础操作 **2.1 操作浏览器基本方法** ##### 2.1.1 打开网页 使用`get`方法打开指定网址: ```python driver.get("http://www.example.com") ``` ##### 2.1.2 设置休眠 在测试过程中,有时需要暂停一段时间让页面加载完成: ```python import time time.sleep(3) ``` ##### 2.1.3 页面刷新 使用`refresh`方法刷新当前页面: ```python driver.refresh() ``` ##### 2.1.4 页面切换 如果打开了多个标签页,可以使用`window_handles`和`switch_to.window`方法切换: ```python for window in driver.window_handles: driver.switch_to.window(window) ``` ##### 2.1.5 设置窗口大小 调整浏览器窗口大小: ```python driver.set_window_size(800, 600) ``` ##### 2.1.6 截屏 保存当前页面截图: ```python driver.save_screenshot("screenshot.png") ``` ##### 2.1.7 退出 结束浏览器会话: ```python driver.quit() ``` **2.2 常用8种元素定位** ##### 2.2.1 find_element_by_id() 通过ID定位元素: ```python element = driver.find_element_by_id("element_id") ``` ##### 2.2.2 find_element_by_name() 通过name属性定位元素: ```python element = driver.find_element_by_name("element_name") ``` ##### 2.2.3 find_element_by_class_name() 通过class名称定位元素: ```python element = driver.find_element_by_class_name("element_class") ``` ##### 2.2.4 find_element_by_tag_name() 通过HTML标签名定位元素: ```python element = driver.find_element_by_tag_name("input") ``` ##### 2.2.5 find_element_by_link_text() 通过链接文本定位元素: ```python element = driver.find_element_by_link_text("Link Text") ``` ##### 2.2.6 find_element_by_partial_link_text() 通过部分链接文本定位元素: ```python element = driver.find_element_by_partial_link_text("Partial Link Text") ``` ##### 2.2.7 find_element_by_xpath() 使用XPath表达式定位元素: ```python element = driver.find_element_by_xpath("//div[@id='content']/h1") ``` ##### 2.2.8 find_element_by_css_selector() 使用CSS选择器定位元素: ```python element = driver.find_element_by_css_selector("div#content h1") ``` **2.3 XPath定位** ##### 2.3.1 XPath:属性定位 通过属性值来定位元素: ```python element = driver.find_element_by_xpath("//div[@class='example']") ``` ##### 2.3.2 XPath:其他属性 使用其他属性值定位元素: ```python element = driver.find_element_by_xpath("//img[@src='example.png']") ``` ##### 2.3.3 XPath:标签 仅通过标签名定位元素: ```python element = driver.find_element_by_xpath("//img") ``` ##### 2.3.4 XPath:层级 根据层级关系定位元素: ```python element = driver.find_element_by_xpath("//div[@id='content']/p") ``` ##### 2.3.5 XPath:索引 通过索引值定位元素: ```python element = driver.find_element_by_xpath("(//div[@class='example'])[2]") ``` ##### 2.3.6 XPath:逻辑运算 使用逻辑运算符定位元素: ```python element = driver.find_element_by_xpath("//div[@class='example' and @id='test']") ``` ##### 2.3.7 XPath:模糊匹配 使用通配符等进行模糊匹配: ```python element = driver.find_element_by_xpath("//div[starts-with(@class, 'example')]") ``` **2.4 CSS定位语法** ##### 2.4.1 CSS:属性定位 通过属性值来定位元素: ```python element = driver.find_element_by_css_selector("[class='example']") ``` ##### 2.4.2 CSS:其他属性 使用其他属性值定位元素: ```python element = driver.find_element_by_css_selector("[src='example.png']") ``` ##### 2.4.3 CSS:标签 仅通过标签名定位元素: ```python element = driver.find_element_by_css_selector("img") ``` ##### 2.4.4 CSS:层级关系 根据层级关系定位元素: ```python element = driver.find_element_by_css_selector("div#content p") ``` ##### 2.4.5 CSS:索引 通过索引值定位元素: ```python elements = driver.find_elements_by_css_selector("div.example") target_element = elements[1] ``` ##### 2.4.6 CSS:逻辑运算 使用逻辑运算符定位元素: ```python element = driver.find_element_by_css_selector("div[class='example'][id='test']") ``` ##### 2.4.7 CSS:模糊匹配 使用通配符等进行模糊匹配: ```python element = driver.find_element_by_css_selector("div[class^='example']") ``` **2.5 SeleniumBuilder辅助定位元素** ##### 2.5.1 安装SeleniumBuilder SeleniumBuilder是一种辅助工具,可以帮助快速定位页面上的元素: ```bash pip install seleniumbuilder ``` ##### 2.5.2 直接运用 使用SeleniumBuilder提供的API进行元素定位: ```python from seleniumbuilder.core.builder import Builder builder = Builder(driver) element = builder.find_element_by_label("Username") ``` ##### 2.5.3 实践案例 在实际项目中结合使用Selenium和SeleniumBuilder: ```python from selenium import webdriver from seleniumbuilder.core.builder import Builder driver = webdriver.Chrome() driver.get("http://www.example.com") builder = Builder(driver) username_input = builder.find_element_by_label("Username") password_input = builder.find_element_by_label("Password") username_input.send_keys("your_username") password_input.send_keys("your_password") login_button = builder.find_element_by_label("Login") login_button.click() ``` **2.6 操作元素(键盘和鼠标事件)** ##### 2.6.1 简单操作 发送文本到输入框: ```python element.send_keys("text") ``` ##### 2.6.2 submit提交表单 通过调用`submit`方法提交表单: ```python element.submit() ``` ##### 2.6.3 键盘操作 模拟键盘操作: ```python from selenium.webdriver.common.keys import Keys element.send_keys(Keys.ENTER) ``` ##### 2.6.4 鼠标悬停事件 触发鼠标悬停事件: ```python from selenium.webdriver.common.action_chains import ActionChains actions = ActionChains(driver) actions.move_to_element(element).perform() ``` **2.7 多窗口、句柄(handle)** ##### 2.7.1 定位一组元素 查找一组具有相同特征的元素: ```python elements = driver.find_elements_by_class_name("example") ``` ##### 2.7.2 获取当前窗口句柄 获取当前窗口的句柄: ```python current_handle = driver.current_window_handle ``` ##### 2.7.3 获取所有句柄 获取所有打开的窗口句柄: ```python handles = driver.window_handles ``` ##### 2.7.4 切换句柄 切换到特定窗口: ```python for handle in handles: driver.switch_to.window(handle) ``` ##### 2.7.5 关闭新窗口,切回主页 关闭当前窗口并切换回主页: ```python driver.close() driver.switch_to.window(handles[0]) ``` ##### 2.7.6 批量操作 对一组元素进行批量操作: ```python for element in elements: element.click() ``` ##### 2.7.7 最终脚本 整合以上操作的完整脚本示例: ```python from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get("http://www.example.com") elements = driver.find_elements(By.CLASS_NAME, "example") for element in elements: element.click() driver.quit() ``` **2.8 定位一组元素find_elements** ##### 2.8.1 定位搜索结果 查找一组具有相同特征的元素: ```python elements = driver.find_elements_by_class_name("search-result") ``` ##### 2.8.2 确认定位结果 确保找到了正确的元素数量: ```python assert len(elements) > 0 ``` ##### 2.8.3 随机函数 使用Python标准库中的`random`模块生成随机数: ```python import random random_index = random.randint(0, len(elements) - 1) ``` ##### 2.8.4 随机打开url 随机访问一组URL中的某一个: ```python urls = ["http://example1.com", "http://example2.com"] selected_url = random.choice(urls) driver.get(selected_url) ``` ##### 2.8.5 通过click点击打开 点击元素以打开新的链接: ```python elements[random_index].click() ``` **2.9 iframe** ##### 2.9.1 iframe概述 iframe 是网页中的一个内嵌框架,允许在当前页面中嵌入另一个页面。处理包含iframe的页面时,需要先切换到该iframe才能进行进一步的操作。 Selenium高级自动化不仅涵盖了基本的环境搭建、浏览器操作,还深入探讨了元素定位、页面操作、多窗口处理等高级话题。通过对这些知识点的学习和实践,能够极大地提升Web自动化测试的能力和效率。
- 粉丝: 1
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助