自动化测试工具-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 中,您可以编写:

element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "myDynamicElement"))
)

使用 Helium,您可以编写:

wait_until(Button('Download').exists)

3、安装

要使用 Helium,需要 Python 3 环境,支持 Chrome 或 Firefox。

打开命令行,输入安装命令即可。

pip install helium

如图所示:

Helium 安装成功,对应版本为 3.0.8。

依赖的 Selenium 对应版本为 3.141.0。

4、第一个脚本

打开命令行,进入 Python 3 环境,之后,依次输入命令:

打开 Chrome 浏览器,跳转到作者博客页面。

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 浏览器,跳转到作者博客页面。

之后将脚本完善。

脚本内容:

#!/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 模块

from helium import *

2、操作 Chrome

# 启动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

# 启动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

go_to("baidu.com")

5、输入

write("Hello World!")
write("admin123456", into="Username:")
write("Meng", into=Alert("Please enter your name"))

6、键盘操作

press('a')
press('A')
press(ENTER)
press(CONTROL + 'a')

7、点击(给定的元素或点)

click("登录")
click(Button("OK"))
click(Point(200, 300))
click(ComboBox("File type").top_left + (50, 0))

8、双击(给定的元素或点)

doubleclick("双击确认")
doubleclick(Image("Directories"))
doubleclick(Point(200, 300))
doubleclick(TextField("Username").top_left - (0, 20))

9、拖动给定元素或指向给定位置

drag("Drag me!", to="Drop here.")

10、查找给定 GUI 元素谓词的所有匹配项

find_all(Button("Open"))
find_all(Window())
find_all(TextField("Address line 1"))

11、将页面向下滚动给定的像素数

scroll_down(num_pixels=100)

12、将页面向上滚动给定的像素数

scroll_up(num_pixels=100)

13、将页面向右滚动给定的像素数

scroll_right(num_pixels=100)

14、将页面向左滚动给定的像素数

scroll_left(num_pixels=100)

15、将鼠标光标悬停在给定的元素或点上

hover("文件大小")
hover(Button("OK"))
hover(Link("下载"))
hover(Point(200, 300))
hover(ComboBox("File type").top_left + (50, 0))

16、右键单击(在给定的元素或点上)

rightclick("文件")
rightclick(Point(200, 300))
rightclick(Image("验证码"))

17、从组合框中选择一个值

select("语言", "中文")
select(ComboBox("语言"), "中文")

18、拖拽文件到给定元素上

click("邮件")
write("wangmcn@163.com", into="To")
write("Email subject", into="Subject")
drag_file(r"C:\Documents\notes.txt", to="附件")

19、将文件附加到文件输入元素

attach_file("c:/test.txt", to="请选择文件")

20、刷新当前页面

refresh()

21、等到给定的条件函数结果为真时

wait_until(Text("Finished!").exists)

22、设置隐式等待

Config.implicit_wait_secs = 0

23、警报框

# 确定
Alert().accept()

# 取消或关闭
Alert().dismiss()

24、坐标点击

Point(x=10, y=25)

25、切换到给定的浏览器窗口

switch_to("baidu")
switch_to(find_all(Window())[0])

26、截图

get_driver().save_screenshot(r'C:\screenshot.png')

精彩推荐

面试笔试系列

思维导图系列

Linux常用命令壁纸

接口Requests系列

测试框架pytest系列

Jmeter快速上手之接口测试

自动化测试框架结构图

移动安全框架(MobSF)

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangmcn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值