赞
踩
基本于Python语言 和 Selenium框架,使用PyCharm 开发环境,详细介绍自动化测试环境的搭建 以及 基本的使用方法。
Python环境目前已被大部分主流操作系统所支持,比如在Linux、Mac、Unix等系统上就自带了Python环境,但在Windows系统上目前还需要自己安装,(当然如已经安装过了的话,这步可以直接跳过)。
Python下载地址:https://www.python.org/downloads
根据自己的需求下载对应的Python版本,一般进入官网的下载地址默认是最新版。
点击Downlad Python 3.11.2 按扭后,进入下载页面,选择自己想要安装的版下载
点击下载好的python-3.11.3-amd64.exe可执行文件,进入Python安装对话界面,选择各安装项,如:Documentation文档、pip包管理工具(必选)、tcl/tk等(一般全都选上)、配置安装路径(这里选择安装在D盘的Program Files (x86)目录下,[因为一般Windows系统默认C盘为系统盘,所以将软件安装在其他盘如:D盘])。
根据提示 Next 直到安装完成后,在命令窗口中输入 python --version 命令测试是否安装成功(注:若提示python命令不存在,先去检查否是有配置path环境变量(环境变量配置方法),如果path中没有配置python可手动将如下python路径添加到path中,或配置了没生效需要重启一下电脑即可)。
python --version
# 或
py --version
Python 3.11.3 # 显示版本号则表示安装成功!
# 输入python命令 或 py命令 按回车键
python
# 进入如下python命令模式
Python 3.11.3 (tags/v3.11.3:f3909b8, Apr 4 2023, 23:49:59) [MSC v.1934 64 bit (AMD64)] on win64
Type "help", "copyright", "credits" or "license" for more information.
>>>
注:如果已安装过pip包管理工具的话,此步也可直接路过(一般在安装Python环境时,可以在安装配置项中勾选上pip,这样在安装Python环境时自动将pip也安装上了),以下是没有过安装pip的安装步骤!
pip是一个安装Python包的管理工具,很多功能强大、使用方便的Python框架、插件、工具等,都是通过pip来进行安装的,在后面的自动化测试就需要pip来安装selenium自动化集成测试框架。
注:如果是在Linux系统环境下(只要支持apt-get命令),可以直接执行如下命令安装即可!
apt-get install python-pip
pip下载地址:https://pypi.org/project/pip
将下载的pip-23.0.1.tar.gz文件解压,并在解压后的文件目录中打开命令行工具,执行安装命令(注:应步骤先安装好python环境才能执行成功哦!!)
python setup.py install
在命令执行结束后,执行如下命令,可查看是否安装成功。
pip --version # 如果显示版本号则表示安装成功! pip 22.3.1 from D:\Program Files (x86)\Python311\Lib\site-packages\pip (python 3.11) # 使用pip help命令可以显示所有pip的相关命令 和 功能说明 pip help PS E:\Desktop> pip help Usage: pip <command> [options] Commands: install Install packages. download Download packages. uninstall Uninstall packages. freeze Output installed packages in requirements format. inspect Inspect the python environment. list List installed packages. show Show information about installed packages. check Verify installed packages have compatible dependencies. config Manage local and global configuration. search Search PyPI for packages. cache Inspect and manage pip's wheel cache. index Inspect information available from package indexes. wheel Build wheels from your requirements. hash Compute hashes of package archives. completion A helper command used for command completion. debug Show information useful for debugging. help Show help for commands. ...
WebDriver给Python、Ruby、Java、C#等高级语言提供的很多API,支持开发人员使用自己喜欢的编程语言来操作浏览器,尤其是用在自动化测试上,了解更多WebDriver。
现在一般主流浏览器都有对应的WebDriver浏览器驱动,根据自己的需求下载即可。
Chrome浏览器驱动下载地址:https://chromedriver.storage.googleapis.com/index.html
Edge浏览器驱动下载地址:https://developer.microsoft.com/zh-cn/microsoft-edge/tools/webdriver) 或 https://msedgewebdriverstorage.z22.web.core.windows.net
Mozilla浏览器驱动下载地址:https://github.com/mozilla/geckodriver/tags
Opera浏览器驱动下载地址:https://github.com/operasoftware/operachromiumdriver/tags
Safari浏览器驱动下载地址:https://webkit.org/blog/6900/webdriver-support-in-safari-10
可根据自己的需求,选择对应类型版本的驱动即可,这里以微软的Edge WebDriver为例(其他也是同样的操作),进入下载页面后,根据对应浏览器版本号,然后下载对应的WebDriver驱动文件。
注:WebDriver驱动版本号 一定要和 Web浏览器版本号 对应!!
注:WebDriver驱动版本号 一定要和 Web浏览器版本号 对应!!
将下载好的developer.exe驱动文件解压后,复制移动到Python解释器所在的文件夹(就是Python的安装目录,和python.exe同级目录)就完成安装了。
PyCharm 是一个强大的面向专业开发者的Python IDE(Python集成开发环境、代码编辑器),PyCharm完全理解代码的每个面向。 依靠它的智能代码补全、 实时错误检查和快速修复功能,轻松进行项目导航 等众多辅助功能。
PyCharm下载地址:https://www.jetbrains.com.cn/pycharm
根据自己的需求,选择对应操作系统下的试用收费版(【免费试用30天】比免费版支持开发语言更多、功能更齐全) 或 免费版(纯Python开发)。
点击下载好的pycharm-community-2023.1.exe可执行文件,进入PyCharm安装对话界面,配置安装路径(这里同样也选择安装在D盘的Program Files (x86)目录下),然后选择各安装项如:创建桌面快捷方式、添加环境变量、右键菜单等(一般全都选上),Next 直到安装结束。
待PyCharm安装完成后,自动会在桌面创建快捷方式,双击PyCharm图标打开如下界面,到此PyCharm就装完成功啦,可根据自己的需要,新建项目、打开项目、从Get拉取代码等操作。
默认情况下PyCharm编辑器是英文界面,如果想要显示中文界面,只需安装一个汉化插件即可。
Pycharm插件方法:
首先,打开PyCharm编辑器,点击左上角的主菜单按扭,选择“ file ”选项,然后点击“ setting ”,在打开后的界面中,点击“ plugins ”选项,输入“ Chinese ”找到中文安装包,点击“ Install ”,在安装完成后,点击“ restart IDE ”重启程序 或 关闭重新启动软件就变成中文界面啦。
PyCharm提供了许多好用的插件,可帮助提高开发效率,可根据自己的需要来进行安装,以下列出了一些常用的插件。
注:部公插件在安装后需要关闭Pycharm再重新打开才生效哦!
插件名称 | 功能用途 |
---|---|
Rainbow Brackets | 把括号的内层和外层用不同的颜色显示 |
Indent Rainbow | 对不同层级缩进的空格标注不同的颜色 |
Rainbow csv | 对CSV文件当中的不同的行都可以用不同的颜色标出 |
Tabnine | 自动填充代码插件 |
CodeGlance | 快速预览(在编辑器右侧生成预览区,拖到可快捷的定位所要寻找的代码位置) |
JSON Parser | JSON美化插件 |
Markdown Navigator | 可实时的预览和编辑Markdown文件 |
Translation | 翻译插件 |
Regex Tester | 正则表达式测试插件 |
Key Promoter X | 提供快捷键提示,以快速地掌握PyCharm的快捷键 |
Selenium是一个用于Web应用程序测试的自动化集成测试操作框架。由thoughtworks 公司推出,它可以直接在浏览器中运行,模拟真实用户直接在浏览器中模拟用户操作。在自动化测试中,可用于单元测试、冒烟测试、集成测试、回归测试、系统测试等,并且可以运行在不同类型的浏览器和操作系统上。利用Selenium,可以驱动浏览器执行特定的动作,比如:点击、下拉等等,还可以获取浏览器当前呈现的页面的源代码。支持包括Microsoft Edge(IE之后)、Google Chrome、Opera、Mozilla Firefox、Apple Safari、等浏览器。
Selenium 官网:https://www.selenium.dev
Selenium GitHub地址:https://github.com/SeleniumHQ/selenium
Selenium API文档:https://www.selenium.dev/selenium/docs/api/py
要查看全局安装的selenium包存放路径(一般同Python的安装路径) 如:D:\Program Files (x86)\Python311\lib\site-packages\selenium
# 格式 pip install 要安装的包名 pip install selenium # 或(-U 安装或升级) pip install -U selenium # 如果要安装指定的selenium版本(安装其他包的操作也相同) # 格式 pip install 要安装的包名 == 要指定安装的版本号 pip install selenium == 4.8.0 # 在输入pip install selenium命令后 按回车确认键,就开始显示以下安装过程 PS E:\AutoTest> pip install selenium Defaulting to user installation because normal site-packages is not writeable Collecting selenium Downloading selenium-4.8.3-py3-none-any.whl (6.5 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸━━━━ 5.8/6.5 MB 86.6 kB/s eta 0:00:16
局部安装需要指定安装目录,可通过–target参数来指定
# 格式:
pip install --target=path_name package_name # path_name表示安装的路径, package_name表示安装包名
# 例如
pip install --target=./lib selenium # 表示将selenium包安装在,当前目录下的lib文件夹中(./表示当前目录)
安装完成后,想要查看某个包的版本号,可在命令行工具中输入pip show 包名 来进行查看
pip show selenium
# 如在输入pip show selenium命令后 按回车确认键,会显示出selenium包的版本号、安装路径等相关信息!
PS E:\AutoTest> pip show selenium
Name: selenium
Version: 4.8.3
Summary:
Home-page: https://www.selenium.dev
Author:
Author-email:
License: Apache 2.0
Location: C:\Users\MuGuiLin\AppData\Roaming\Python\Python311\site-packages
Requires: certifi, trio, trio-websocket, urllib3
Required-by:
如果想要删除已安装好的包,可在命令行工具中输入 pip uninstall 包名 来进行卸载删除
pip uninstall selenium
# 在输入pip uninstall selenium命令后 按回车确认键,会显提示Proceed (Y/n)? 输入Y表示确认删除!
PS E:\AutoTest> pip uninstall selenium
Found existing installation: selenium 4.8.3
Uninstalling selenium-4.8.3:
Would remove:
c:\users\muguilin\appdata\roaming\python\python311\site-packages\selenium-4.8.3.dist-info\*
c:\users\muguilin\appdata\roaming\python\python311\site-packages\selenium\*
Proceed (Y/n)?
打开PyCharm编辑器,根据如下图所示创建自动化测试项目实例。
项目创建完成后,新建一个python测试文件,用于编写测试代码,具体步骤:在左侧项目AutoTest文件夹上,鼠标点击右键 -> new 新建 -> python文件,输入文件名为test.py,操作实例如下图所示:
test.py文件内容如下
# -*- coding: UTF-8 -*- # 导入selenium框架 from selenium import webdriver from selenium.webdriver.common.by import By import time # 开启浏览器测试会话 driver = webdriver.Edge() # 注:如果不在PyCharm编辑器中运行代码,侧需要指定Edge WebDriver驱动路径 # driver = webdriver.Edge(r'D:/Program Files (x86)/Python311/msedgedriver.exe') # 指定加载浏览器RUL(要测试的网址) driver.get("http://www.muguilin.com") # 最大化浏览器窗口 driver.maximize_window() # 强制延时等待1分钟 time.sleep(60) # 退出测试会话 driver.quit()
直接点击上方工具栏中的运行按扭(默认运行main.py文件),或 左侧左侧项目目录中的xxx.py文件上右击 -> Run运行(U) ,双或者 在左侧项目目录中选择好要运行的xxx.py文件,用快捷键同时按下Ctrl+Shift+F10来运行当前选中的文件 。
进入要运行代码的目录,按住Shift键不放,鼠标在空白处右击 -> 在此处打开PowerShell命令窗口(S),输入python test.py 回车便启动运行啦!
python test.py
# 或
py test.py
命令执行后会自动打开浏览器,并跳转到测试实例代码中指定的网址,实例效果如下:
在Pycharm中打开项目后,在运行时可能报selenium不存在、找不到selenium模块,selenium和webdriver上下有红色波浪线,左下角也提示:unresolved reference ‘webdriver’,导致无法运行。
原因: 在Pycharm打开新打开 或 新建项目时,会自动设置(可也以指定)运行环境为虚拟环境。此如一来,即便是之前你在操作系统中安装了selenium模块,但是这个新打开 或 新建项目的venv虚拟环境中是没有selenium 模块,所以才会提示在Pycharm 找不到selenium模块导致的这个错误。
**解决办法:**就是在项目的venv虚拟环境目录中安装selenium
1、在Pycharm中打在命令行工具
2、进入venv虚拟环境目录:cd venv
3、进入python虚拟环境:Scripts\activate
4、安装selenium模块包:pip install selenium
想了解更多Selenium框架的使用方法,可去这里查看 https://selenium-python.readthedocs.io/api.html
# 引入selenium操作框架
from selenium import webdriver
# 开启浏览器会话
driver = webdriver.Edge()
# 显示driver对象提供的所有方法关键字
print('driver对象中的关键字:', dir(driver))
# 在下面的各个关键字前 加上 driver. 就可以访问对应的方法和常量了,如:driver.get_window_size()
'__abstractmethods__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_abc_impl', '_authenticator_id', '_file_detector', '_get_cdp_details', '_is_remote', '_mobile', '_shadowroot_cls', '_switch_to', '_unwrap_value', '_web_element_cls', '_wrap_value', 'add_cookie', 'add_credential', 'add_virtual_authenticator', 'application_cache', 'back', 'bidi_connection', 'capabilities', 'caps', 'close', 'command_executor', 'create_options', 'create_web_element', 'current_url', 'current_window_handle', 'delete_all_cookies', 'delete_cookie', 'delete_network_conditions', 'desired_capabilities', 'error_handler', 'execute', 'execute_async_script', 'execute_cdp_cmd', 'execute_script', 'file_detector', 'file_detector_context', 'find_element', 'find_elements', 'forward', 'fullscreen_window', 'get', 'get_cookie', 'get_cookies', 'get_credentials', 'get_issue_message', 'get_log', 'get_network_conditions', 'get_pinned_scripts', 'get_screenshot_as_base64', 'get_screenshot_as_file', 'get_screenshot_as_png', 'get_sinks', 'get_window_position', 'get_window_rect', 'get_window_size', 'implicitly_wait', 'launch_app', 'log_types', 'maximize_window', 'minimize_window', 'mobile', 'name', 'orientation', 'page_source', 'pin_script', 'pinned_scripts', 'port', 'print_page', 'quit', 'refresh', 'remove_all_credentials', 'remove_credential', 'remove_virtual_authenticator', 'save_screenshot', 'service', 'session_id', 'set_network_conditions', 'set_page_load_timeout', 'set_permissions', 'set_script_timeout', 'set_sink_to_use', 'set_user_verified', 'set_window_position', 'set_window_rect', 'set_window_size', 'start_client', 'start_desktop_mirroring', 'start_session', 'start_tab_mirroring', 'stop_casting', 'stop_client', 'switch_to', 'timeouts', 'title', 'unpin', 'vendor_prefix', 'virtual_authenticator_id', 'window_handles'
# 引入selenium操作框架 from selenium import webdriver from selenium.webdriver.common.by import By # 开启浏览器会话 driver = webdriver.Chrome() # driver = webdriver.Edge() # 指定加载浏览器RUL driver.get("http://www.muguilin.com") # 打开新页面 driver.navigate().to("http://www.muguilin.com/blog") # 最大化窗口(有时候执行某些按扭、事件等无效时,就是没有最大化浏览器窗口【不在可视区】导致的!) driver.maximize_window() # 最小化窗口 driver.minimize_window() # 保存屏幕截图 driver.save_screenshot('fileName') # 获取当前浏览器窗口可视区宽高 driver.get_window_size() # 获取当前窗口坐标 driver.get_window_position() # 设置窗口大小 driver.set_window_size(1920, 1080) # 刷新页面 driver.refresh() # 前进页面 driver.forward() # 后退页面 driver.back() # 关闭窗口 driver.close() # 关闭浏览器会话(关闭session等) driver.quit()
# 引入selenium操作框架 from selenium import webdriver from selenium.webdriver.common.by import By # 开启浏览器会话 driver = webdriver.Chrome() # 其他浏览器会话方法 # webdriver.Firefox() # webdriver.FirefoxProfile() # webdriver.FirefoxOptions() # webdriver.Chrome() # webdriver.ChromeOptions() # webdriver.Ie() # webdriver.IeOptions() # webdriver.Edge() # webdriver.ChromiumEdge() # webdriver.EdgeOptions() # webdriver.Safari() # webdriver.WebKitGTK() # webdriver.WebKitGTKOptions() # webdriver.WPEWebKit() # webdriver.WPEWebKitOptions() # webdriver.Remote() # webdriver.DesiredCapabilities() # webdriver.ActionChains() # webdriver.Proxy() # webdriver.Keys() # 最大化窗口 driver.maximize_window() # 指定加载浏览器RUL driver.get("http://www.muguilin.com") # 选择input元素并设置值 username = driver.find_element(by=By.ID, value='username').send_keys('admin') passwerd = driver.find_element(by=By.ID, value='passwerd').send_keys('123456') # 选择button元素并模拟点击事件 driver.find_element(by=By.ID, value='login-button').click() # 设置取username输入框文本内容 username.sendKeys('root') # 获取username输入框文本内容 username.getText() # 清空username输入框文本内容 username.clear() # driver.find_element(By.ID, 'xxxid') // 单个DOM元素选择器方法 # driver.find_elements(By.CLASS_NAME, 'xxxClassName') // 多个DOM元素选择器方法 # 其他DOM元素选择器方法 # ID = "id" # NAME = "name" # TAG_NAME = "tag name" # CLASS_NAME = "class name" # LINK_TEXT = "link text" # PARTIAL_LINK_TEXT = "partial link text" # XPATH = "xpath" # CSS_SELECTOR = "css selector" # 关闭浏览器会话 driver.quit()
Selenium框架中的ActionChains类供了很多,如:右击,双击,悬停,滑动、以及拖放等鼠标模拟操作。
"""The ActionChains implementation,""" class ActionChains: def __init__(self, driver, duration=250) def perform(self) def reset_actions(self) def click(self, on_element=None) def click_and_hold(self, on_element=None) def context_click(self, on_element=None) def double_click(self, on_element=None) def drag_and_drop(self, source, target) def drag_and_drop_by_offset(self, source, xoffset, yoffset) def key_down(self, value, element=None) def key_up(self, value, element=None) def move_by_offset(self, xoffset, yoffset) def move_to_element(self, to_element) def move_to_element_with_offset(self, to_element, xoffset, yoffset) def pause(self, seconds) def release(self, on_element=None) def send_keys(self, *keys_to_send) def send_keys_to_element(self, element, *keys_to_send) def scroll_to_element(self, element: WebElement) def scroll_by_amount(self, delta_x: int, delta_y: int) def scroll_from_origin(self, scroll_origin: ScrollOrigin, delta_x: int, delta_y: int) def scroll(self, x: int, y: int, delta_x: int, delta_y: int, duration: int = 0, origin: str = "viewport") def __enter__(self) def __exit__(self, _type, _value, _traceback)
在使用前,需要先导入ActionChains类,通过ActionChains类提供的相关方法来模拟鼠标操作,在调用ActionChains的方法时,并不是立即执行的,而是把所有的操作,按顺序存放在一个队列里,当调用perform()方法时,队列中的事件会依次执行。
# 引入selenium操作框架 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver import ActionChains from time import sleep # 开启浏览器会话 driver = webdriver.Chrome() # 指定加载浏览器RUL driver.get("http://www.baidu.com") # 装载ActionChains类 action = ActionChains(driver) sleep(1) # 模拟右键点击 action.context_click().perform() # 在选择ID为kw的input元素上 模拟右键点击 element = driver.find_element(by=By.ID, value='kw') action.context_click(element).perform() sleep(10)
在自动化测试开发过程中,除了模拟鼠标操作以外,有时还需要借助模拟键盘操作一起来配合使用,Selenium的Keys类供了很多复制、粘贴、全选,以及触发回车键、删除键甚至组合式快捷键等。
"""The Keys implementation.""" class Keys: """Set of special keys codes.""" NULL = "\ue000" CANCEL = "\ue001" # ^break HELP = "\ue002" BACKSPACE = "\ue003" BACK_SPACE = BACKSPACE TAB = "\ue004" CLEAR = "\ue005" RETURN = "\ue006" ENTER = "\ue007" SHIFT = "\ue008" LEFT_SHIFT = SHIFT CONTROL = "\ue009" LEFT_CONTROL = CONTROL ALT = "\ue00a" LEFT_ALT = ALT PAUSE = "\ue00b" ESCAPE = "\ue00c" SPACE = "\ue00d" PAGE_UP = "\ue00e" PAGE_DOWN = "\ue00f" END = "\ue010" HOME = "\ue011" LEFT = "\ue012" ARROW_LEFT = LEFT UP = "\ue013" ARROW_UP = UP RIGHT = "\ue014" ARROW_RIGHT = RIGHT DOWN = "\ue015" ARROW_DOWN = DOWN INSERT = "\ue016" DELETE = "\ue017" SEMICOLON = "\ue018" EQUALS = "\ue019" NUMPAD0 = "\ue01a" # number pad keys NUMPAD1 = "\ue01b" NUMPAD2 = "\ue01c" NUMPAD3 = "\ue01d" NUMPAD4 = "\ue01e" NUMPAD5 = "\ue01f" NUMPAD6 = "\ue020" NUMPAD7 = "\ue021" NUMPAD8 = "\ue022" NUMPAD9 = "\ue023" MULTIPLY = "\ue024" ADD = "\ue025" SEPARATOR = "\ue026" SUBTRACT = "\ue027" DECIMAL = "\ue028" DIVIDE = "\ue029" F1 = "\ue031" # function keys F2 = "\ue032" F3 = "\ue033" F4 = "\ue034" F5 = "\ue035" F6 = "\ue036" F7 = "\ue037" F8 = "\ue038" F9 = "\ue039" F10 = "\ue03a" F11 = "\ue03b" F12 = "\ue03c" META = "\ue03d" COMMAND = "\ue03d" ZENKAKU_HANKAKU = "\ue040"
在使用前,需要先导入Keys类,在选择好DOM元素后,配合send_keys()方法一起模拟键盘操作
# 引入selenium操作框架 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from time import sleep # 开启浏览器会话 driver = webdriver.Chrome() # 指定加载浏览器RUL driver.get("http://www.baidu.com") sleep(1) # 在选择ID为kw的input元素上 模拟按回车键 driver.find_element(by=By.ID, value='kw').send_keys('沐枫', Keys.ENTER) # 回车键(ENTER) #driver.switch_to.active_element.send_keys(Keys.ENTER) sleep(10) """ 单个键 模拟 element.send_keys(Keys.F1) # 键盘F1 element.send_keys(Keys.F5) # 键盘F5(页面刷新) element.send_keys(Keys.F12) # 键盘F2(页面调试) element.send_keys(Keys.TAB) # 制表键(TAB) element.send_keys(Keys.BACK_SPACE) # 退格键(BackSpace) element.send_keys(Keys.DELETE) # 删除键(DELETE) element.send_keys(Keys.ENTER) # 回车键(ENTER) element.send_keys(Keys.SPACE) # 空格键(SPACE) """ """ 组合键 模拟 element.send_keys(Keys.CONTROL,'a') # 全选(Ctrl+A) element.send_keys(Keys.CONTROL,'x') # 剪切(Ctrl+X) element.send_keys(Keys.CONTROL,'c') # 复制(Ctrl+C) element.send_keys(Keys.CONTROL,'s') # 保存(Ctrl+S) element.send_keys(Keys.CONTROL,'v') # 粘贴(Ctrl+V) """
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。