自动化测试工具-Helium

2022-06-16 00:00:00 元素 脚本 给定 页面 打开

目录

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')
————————————————
版权声明:本文为CSDN博主「wangmcn」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wangmcn/article/details/125108036

相关文章