一篇学会Selenium 4.0
一、认识Selenium
1. 什么是Selenium
Selenium是一个用于Web应用程序自动化测试的工具,它可以模拟用户在浏览器中的操作,如点击、输入等,以检测应用程序的功能和性能。
2. Selenium的发展
Selenium起源于2004年,ThoughtWorks为了快速测试Web应用程序而开发的一款工具,这个工具是Selenium。
早期Selenium是一个基于JavaScript的测试工具,被称为Selenium Core。它可以嵌入到浏览器中,通过JavaScript来操作Web页面并验证其功能。后来,Selenium RC(Remote Control)诞生了,它允许测试人员使用自己熟悉的编程语言(如Java、Python等)来编写测试脚本,并通过Selenium RC来控制浏览器执行测试。
2009年,Selenium RC与WebDriver项目合并,形成了Selenium 2,也被称为Selenium WebDriver。WebDriver是一个更现代的浏览器自动化框架,它提供了更简洁、更易用的API,并支持更多的浏览器和操作系统。合并后的Selenium 2结合了Selenium RC和WebDriver的优点,成为了一个更强大、更灵活的Web应用程序测试工具。
随着技术的发展和用户需求的变化,Selenium也在不断改进和升级,最新的Selenium版本是Selenium 4,它在Selenium 3的基础上进行了许多改进和优化。
二、为什么学习Selenium
从2012年到2024年这12年里面,互联网得发展以及人们对于产品质量的要求越来越高,对于测试工程师(Quality Assurance Engineer)的要求从原来的“点点点”到能够使用开发技术进行辅助完成测试,其中开发技术辅助完成测试中,很重要的一环,便是回归测试环节。
随着产品和人员的不断迭代,回归测试任务变的越来越重,那么老功能的产品质量,聪明的测试工程师想到了自动化,针对Web UI自动化方面,绝大多数的测试选用了Selenium。
那么Selenium具备哪些优点:
-
开源免费:Selenium是一个开源项目,用户可以免费使用和定制,这大大降低了测试成本。
-
多浏览器支持:Selenium支持多种浏览器,如Chrome、Firefox、Safari等,甚至可以支持手机端的浏览器和原生应用程序,覆盖了大部分主流浏览器,可以满足不同需求。
-
多语言支持:Selenium支持多种编程语言,如Java、Python、Ruby、C#等,方便开发人员使用自己熟悉的语言进行测试开发。
-
灵活性高:Selenium提供了丰富的API和工具,可以模拟人类操作浏览器,实现点击、输入、滚动等操作,同时也支持各种断言和验证方式,可以灵活地定制测试脚本和测试流程。
-
跨平台支持:Selenium可以在Windows、Linux和Mac OS等操作系统上运行,方便不同平台之间的协作和测试。
-
易于使用:Selenium的API设计简单、易懂,同时提供了完善的开发文档,新手能够快速上手。
-
插件丰富:Selenium有大量的插件和扩展,如WebDriverManager、TestNG、JUnit、pytest等,可以方便地扩展自己的测试用例。
-
提高测试质量:Selenium可以保证测试环境的一致性和可重复性,有效避免了人为错误,提高测试的准确性和覆盖范围。
-
支持并行测试:Selenium Grid允许测试人员在多台机器上并行执行测试,以提高测试效率。
三、环境搭建
1. Python虚拟环境管理
-
安装Anaconda
-
官网地址:https://www.anaconda.com/download
-
配置环境变量:
-
新建环境变量 ANACONDA
- 将%ANACONDA%加入到PATH中
- 新打开一个CMD,输入conda -V,如果看到了版本号,说明已经配置成功。
- 创建虚拟环境 :
- 命令行的方式 conda create -n myenv
- 打开Anaconda的客户端,进入到客户端中创建虚拟环境
- 查看虚拟环境列表:conda env list
- 进入到虚拟环境中:conda activate myenv
-
虚拟环境中,输入:pip list,可以查看出当前python所安装的全部包
-
在虚拟环境中安装依赖包:
pip install selenium -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com
-
-i 命令后面跟的为指定镜像源,因为国外镜像源下载比较慢,所以需要指定一个国内的镜像源,国内常用镜像源:
http://pypi.douban.com/simple/ 豆瓣 http://mirrors.aliyun.com/pypi/simple/ 阿里 http://pypi.hustunique.com/simple/ 华中理工大学 http://pypi.sdutlinux.org/simple/ 山东理工大学 http://pypi.mirrors.ustc.edu.cn/simple/ 中国科学技术大学
-
2. 安装IDE
- 安装Pycharm community版本
- 官网地址:https://www.jetbrains.com/pycharm/download/?section=windows
3. 配置虚拟环境
-
安装完毕后,打开pycharm
-
ctrl + alt +s,打开看Setting页面
-
添加配置好的虚拟环境
-
配置创建的虚拟环境
-
设置完毕后,若是没有看到自己导入的包,点击使用conda的环境
4. 安装Chromedriver
-
python根目录:E:\anaconda\envs\myenv
-
chromedriver的配置地址:https://googlechromelabs.github.io/chrome-for-testing/#stable
到这里,环境变量已经全部配置完毕了。
四、Selenium学习
学习大纲
1. 打开浏览器(Webdriver)
from selenium import webdriver
# webdriver.Chrome() 打开的为谷歌浏览器
driver = webdriver.Chrome()
-
我们打开浏览器成功,但是发现当前存在两个小问题
(1)显示【正受到自动化测试软件的控制】
(2)浏览器仅打开一半,并未自动最大浏览器窗口
-
去掉【正受到自动化测试软件的控制】
options = webdriver.ChromeOptions() options.add_experimental_option('excludeSwitches', ['enable-automation'])
-
窗口默认最大化
driver.maximize_window()
-
其他chrome options 实验性控制
参数 解释 -enable-automation 通知用户他们的浏览器是由自动测试控制的 -enable-logging 控制是否启用控制台日志记录,并可选择配置其路由的位置 其他实验的控制:https://blog.csdn.net/ASAS1314/article/details/85059896
-
浏览器常规一些控制
# 无界面模式 options.add_argument('headless') # 指定用户客户端-模拟手机浏览 options.add_argument('user-agent="MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"') # 禁用图片加载 options.add_argument('blink-settings=imagesEnabled=false') # 隐身模式 options.add_argument('incognito') # 自动打开开发者工具 options.add_argument("auto-open-devtools-for-tabs") # 设置窗口尺寸,注意宽高之间使用逗号而不是x options.add_argument('window-size=300,600') # 设置窗口启动位置(左上角坐标) options.add_argument('window-position=120,0') # 禁用gpu渲染 options.add_argument('disable-gpu') # 全屏启动 options.add_argument('start-fullscreen') # 全屏启动,无地址栏 options.add_argument('kiosk') # 启动时,不激活(前置)窗口 options.add_argument('no-startup-window')
2. 打开指定网站
url = '指定的网站地址,如(http://www.baidu.com)'
driver.get(url)
3. 元素定位
方法 | 描述 |
---|---|
By.ID | 通过元素id进行定位 |
By.CLASS_NAME | 通过元素class进行定位 |
By.NAME | 通过元素name进行定位 |
By.TAG_NAME | 通过元素标签进行定位 |
By.LINK_TEXT | 通过元素超链接文本全称进行定位 |
By.PARTIAL_LINK_TEXT | 通过元素超链接文本部分文本进行定位 |
By.XPATH | 通过元素的xpath路径进行定位(万能定位) |
By.CSS_SELECTOR | 通过元素的css selector进行定位(万能定位且定位速度高于xpath) |
(1)By.ID
SEARCH_BOX = (By.ID, 'kw')
element = driver.find_element(*SEARCH_BOX)
element.send_keys('By.ID')
结果
(2)By.CLASS_NAME
SEARCH_PICTURE_BTN = (By.CLASS_NAME, 'soutu-btn')
element = driver.find_element(*SEARCH_PICTURE_BTN)
element.click()
结果
(3)By.Name
SEARCH_BOX = (By.NAME, 'wd')
element = driver.find_element(*SEARCH_BOX)
element