自动化测试工具-Helium
目录
1、前言
2、简介
3、安装
4、第一个脚本
5、常用API
1、前言
现在越来越多的 Web 自动化项目都在使用 Selenium,其特点为提供丰富的 API 功能、支持多语言、多平台等。
与此同时也有很多开源的项目对 Selenium 进行了再次封装,提供更加简洁的 API 功能,比如本篇所要介绍的 Helium。
2、简介
Helium 是用于 Web 自动化的最佳 Python 库。它基于 Selenium-python,为您提供更简单的 API。氦的名字来源于它是一种比硒更轻的化学元素。
在 Selenium 中,需要使用 HTML ID、XPath 和 CSS 选择器来识别网页元素,而 Helium 可以通过用户可见的标签来引用元素,因此,Helium 脚本通常比类似的 Selenium 脚本短30-50%,更重要的是,它们更容易阅读,并且相对于底层网页的更改更稳定。
Helium 只是将 Selenium 进行了包装,所以您可以自由地混合使用这两个库(Helium、Selenium)。
特点:
1、Web 驱动程序管理:Helium 附带了自己的 ChromeDriver 和 geckodriver 副本,因此您无需下载并将它们放在您的 PATH 中。
2、iFrame:与 Selenium 不同,Helium 允许您与嵌套 iFrame 内的元素进行交互,而无需先“切换到”iFrame。
3、窗口管理:Helium 会注意到弹出窗口何时打开或关闭,并像用户一样聚焦/散焦它们,您还可以通过(部分)标题轻松切换到窗口,不再需要遍历 Selenium 窗口句柄。
4、隐式等待:默认情况下,如果您尝试单击带有 Selenium 的元素并且该元素尚未出现在页面上,则您的脚本将失败。默认情况下,Helium 最多等待 10 秒以使元素出现。
5、显式等待:Helium 为您提供了一个更好的 API,用于等待网页上的条件变为真。
Selenium 中,您可以编写:
代码语言:javascript复制element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "myDynamicElement"))
)
使用 Helium,您可以编写:
代码语言:javascript复制wait_until(Button('Download').exists)
3、安装
要使用 Helium,需要 Python 3 环境,支持 Chrome 或 Firefox。
打开命令行,输入安装命令即可。
代码语言:javascript复制pip install helium
如图所示:
Helium 安装成功,对应版本为 3.0.8。
依赖的 Selenium 对应版本为 3.141.0。
4、第一个脚本
打开命令行,进入 Python 3 环境,之后,依次输入命令:
打开 Chrome 浏览器,跳转到作者博客页面。
代码语言:javascript复制from helium import *
start_chrome('https://blog.csdn.net/wangmcn')
如图所示,提示报错:未创建会话:此版本的 ChromeDriver 仅支持 Chrome 版本 99。
之后查询 Chrome 版本为 102。
解决:需要下载对应的 ChromeDriver 版本。
下载地址:
https://chromedriver.chromium.org/downloads
下载对应的版本。
下载完成后,将驱动拷贝到 Python 环境变量所在的路径目录下即可。
例如:
/Library/Frameworks/Python.framework/Versions/3.8/bin
之后再次执行脚本就可以了。
脚本没有报错,并且打开 Chrome 浏览器,跳转到作者博客页面。
之后将脚本完善。
脚本内容:
代码语言:javascript复制#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公众号:AllTests软件测试
from helium import *
from selenium.webdriver.common.by import By
import time
# 打开Chrome
start_chrome('https://blog.csdn.net/wangmcn')
time.sleep(2)
get_driver().save_screenshot(r'/Users/wangmeng/Desktop/screenshot.png')
time.sleep(2)
click('关注')
time.sleep(2)
go_to('https://www.baidu.com')
time.sleep(2)
write('自动化测试', into='百度一下')
time.sleep(2)
if Text('自动化测试').exists():
press(ENTER)
time.sleep(2)
kill_browser()
# 打开Firefox
driver = start_firefox('https://www.baidu.com')
time.sleep(2)
driver.find_element(By.ID, 'kw').send_keys('Selenium')
time.sleep(2)
driver.find_element(By.ID, 'su').click()
time.sleep(2)
driver.quit()
第一段操作 Chrome 使用了 Helium 的 API 方法,第二段操作 Firefox 则使用原生的 Selenium 的 API 方法。
5、常用API
1、引入 helium 模块
代码语言:javascript复制from helium import *
2、操作 Chrome
代码语言:javascript复制# 启动Chrome
start_chrome()
# 打开一个URL
start_chrome('baidu.com')
# 无头模式启动Chrome
start_chrome(headless=True)
start_chrome('baidu.com', headless=True)
# 高级配置,可使用选项或功能参数
from selenium.webdriver import ChromeOptions
options = ChromeOptions()
options.add_argument('--proxy-server=127.0.0.1:5678')
start_chrome(options=options)
from selenium.webdriver import DesiredCapabilities
capabilities = DesiredCapabilities.CHROME
capabilities["pageLoadStrategy"] = "none"
capabilities["goog:loggingPrefs"] = {'performance': 'ALL'}
start_chrome(capabilities=capabilities)
# 终止(关闭)浏览器
kill_browser()
3、操作 Firefox
代码语言:javascript复制# 启动Firefox
start_firefox()
# 打开一个URL
start_firefox('baidu.com')
# 无头模式启动Firefox
start_firefox(headless=True)
start_firefox('baidu.com', headless=True)
# 高级配置,可使用options参数
from selenium.webdriver import FirefoxOptions
options = FirefoxOptions()
options.add_argument("--width=2560")
options.add_argument("--height=1440")
start_firefox(options=options)
# 终止(关闭)浏览器
kill_browser()
4、在当前浏览器中打开指定的 URL
代码语言:javascript复制go_to("baidu.com")
5、输入
代码语言:javascript复制write("Hello World!")
write("admin123456", into="Username:")
write("Meng", into=Alert("Please enter your name"))
6、键盘操作
代码语言:javascript复制press('a')
press('A')
press(ENTER)
press(CONTROL 'a')
7、点击(给定的元素或点)
代码语言:javascript复制click("登录")
click(Button("OK"))
click(Point(200, 300))
click(ComboBox("File type").top_left (50, 0))
8、双击(给定的元素或点)
代码语言:javascript复制doubleclick("双击确认")
doubleclick(Image("Directories"))
doubleclick(Point(200, 300))
doubleclick(TextField("Username").top_left - (0, 20))
9、拖动给定元素或指向给定位置
代码语言:javascript复制drag("Drag me!", to="Drop here.")
10、查找给定 GUI 元素谓词的所有匹配项
代码语言:javascript复制find_all(Button("Open"))
find_all(Window())
find_all(TextField("Address line 1"))
11、将页面向下滚动给定的像素数
代码语言:javascript复制scroll_down(num_pixels=100)
12、将页面向上滚动给定的像素数
代码语言:javascript复制scroll_up(num_pixels=100)
13、将页面向右滚动给定的像素数
代码语言:javascript复制scroll_right(num_pixels=100)
14、将页面向左滚动给定的像素数
代码语言:javascript复制scroll_left(num_pixels=100)
15、将鼠标光标悬停在给定的元素或点上
代码语言:javascript复制hover("文件大小")
hover(Button("OK"))
hover(Link("下载"))
hover(Point(200, 300))
hover(ComboBox("File type").top_left (50, 0))
16、右键单击(在给定的元素或点上)
代码语言:javascript复制rightclick("文件")
rightclick(Point(200, 300))
rightclick(Image("验证码"))
17、从组合框中选择一个值
代码语言:javascript复制select("语言", "中文")
select(ComboBox("语言"), "中文")
18、拖拽文件到给定元素上
代码语言:javascript复制click("邮件")
write("wangmcn@163.com", into="To")
write("Email subject", into="Subject")
drag_file(r"C:Documentsnotes.txt", to="附件")
19、将文件附加到文件输入元素
代码语言:javascript复制attach_file("c:/test.txt", to="请选择文件")
20、刷新当前页面
代码语言:javascript复制refresh()
21、等到给定的条件函数结果为真时
代码语言:javascript复制wait_until(Text("Finished!").exists)
22、设置隐式等待
代码语言:javascript复制Config.implicit_wait_secs = 0
23、警报框
代码语言:javascript复制# 确定
Alert().accept()
# 取消或关闭
Alert().dismiss()
24、坐标点击
代码语言:javascript复制Point(x=10, y=25)
25、切换到给定的浏览器窗口
代码语言:javascript复制switch_to("baidu")
switch_to(find_all(Window())[0])
26、截图
代码语言:javascript复制get_driver().save_screenshot(r'C:screenshot.png')