python模块之helium 自动化测试

一、简介

Helium 是一款 Web 端自动化开源框架,Helium 针对 Selenium 进行了封装,它屏蔽了 Selenium 很多实现细节,提供了更加简洁直观的 API,更方便我们进行 Web 端的自动化

  1. Helium 主要包含下面 6 个优点:
  • Helium 自带 WebDriver,不需要下载、配置浏览器驱动
  • 内嵌页面 iframe 页面元素直接操作,不需要使用 switch_to.frame() 切换 iframe
  • 窗体管理更方便,可以直接使用窗口标题或部分标题内容来切换窗体
  • 隐式等待,针对某个元素执行点击操作,Selenium 如果元素没有出现,脚本会执行失败;而 Helium 默认最多等待 10s,等待元素出现后立马执行点击操作
  • 显式等待,Helium 提供更加优雅的 API 来等待页面元素出现
  • API 更简洁直观,代码量少
  1. Helium 主要缺点,
  • 由于封装,屏蔽了很多细节,所以它不合适二次开发
  • 目前仅支持 Chrome 和 FireFox 浏览器
  • 版本更新慢、遗留 Bug 及文档少
  • 不适合复杂的页面,建议Helium和Selenium配合使用
二、安装
pip install helium
三、基本使用
  1. 谷歌浏览器
import helium
import time

helium.start_chrome()
helium.go_to("baidu.com")

time.sleep(3)

helium.kill_browser()
  1. 浏览器配置
import helium
from selenium.webdriver import ChromeOptions
import time
import os

chrome_options = ChromeOptions()
chrome_options.add_argument('blink-settings=imagesEnabled=false')  # 不加载图片, 提升速度
chrome_options.add_argument('--disable-blink-features=AutomationControlled') #去除浏览器navigator.webdriver

driver_path = os.path.join(os.path.dirname(os.path.dirname(os.getcwd())), 'chromedriver.exe')
helium.set_driver(driver_path)

helium.start_chrome(options=chrome_options,maximize=True)

helium.go_to("baidu.com")

time.sleep(3)
helium.kill_browser()
  1. 搭配Selenium使用
import helium
from selenium import webdriver
import os
import time

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('blink-settings=imagesEnabled=false')  # 不加载图片, 提升速度
chrome_options.add_argument('--disable-blink-features=AutomationControlled') #去除浏览器navigator.webdriver
chrome_options.add_experimental_option('useAutomationExtension', False)  #去掉提示以开发者模式调用
chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])  #以开发者模式启动调试chrome,可以去掉提示受到自动软件控制
chrome_options.add_argument('--start-maximized')  #最大化运行(全屏窗口)

driver_path = os.path.join(os.path.dirname(os.path.dirname(os.getcwd())), 'chromedriver.exe')
browser = webdriver.Chrome(executable_path=driver_path,options=chrome_options)
helium.set_driver(browser)

helium.go_to("baidu.com")

time.sleep(3)
helium.kill_browser()
四、方法及属性
  1. helium.start_chrome(url, headless, maximize, options, capabilities):打开火狐谷歌
  • url:要打开的URL地址。
  • headless:指定是否以无头模式启动Chrome浏览器。默认为False,即以有界面的方式启动。如果将其设置为True,则以无界面的方式启动,即不显示浏览器窗口。
  • maximize:指定是否最大化浏览器窗口。默认为False。如果将其设置为True,则在启动时最大化浏览器窗口。
  • options:一个chrome_options对象,用于配置Chrome浏览器的启动选项。可以使用Options()类创建chrome_options对象,并使用其方法来配置浏览器的各种选项,例如设置代理、启用/禁用JavaScript等。
  • capabilities:一个字典,用于指定Chrome浏览器的所需的额外配置。可以使用该参数来设置浏览器的代理、用户代理字符串等。
  1. helium.start_firefox(url, headless, options, profile):打开火狐
  • url:要打开的URL地址。默认为None,即不打开任何URL。
  • headless:指定是否以无头模式启动Firefox浏览器。默认为False,即以有界面的方式启动。如果将其设置为True,则以无界面的方式启动,即不显示浏览器窗口。
  • options:一个firefox_options对象,用于配置Firefox浏览器的启动选项。可以使用Options()类创建firefox_options对象,并使用其方法来配置浏览器的各种选项,例如设置代理、启用/禁用JavaScript等。
  • profile:一个firefox_profile对象,用于指定要使
  1. helium.set_driver(driver):设置浏览器驱动程序
  2. helium.get_driver():获取浏览器驱动程序
  • driver.get(url): 打开指定的 URL。
  • driver.find_element(by, value): 根据给定的定位方式(如 ID、Class Name、XPath 等)和值定位单个元素。
  • driver.find_elements(by, value): 根据给定的定位方式和值定位一组元素。
  • driver.click(): 单击当前定位的元素。
  • driver.send_keys(*value): 向当前定位的元素发送键盘输入。
  • driver.clear(): 清除当前定位的元素的文本内容。
  • driver.submit(): 提交当前定位的表单元素。
  • driver.get_attribute(name): 获取当前定位的元素的指定属性值。
  • driver.text: 获取当前定位的元素的文本内容。
  • driver.is_displayed(): 检查当前定位的元素是否可见。
  • driver.is_enabled(): 检查当前定位的元素是否可用。
  • driver.is_selected(): 检查当前定位的元素是否被选中(适用于复选框和单选按钮)。
  • driver.execute_script(script, *args): 在当前页面执行 JavaScript 脚本。
  • driver.switch_to.frame(frame_reference): 切换到指定的 iframe 或 frame。
  • driver.switch_to.default_content(): 切换回默认的上下文(退出 iframe 或 frame)。
  • driver.back(): 后退到上一个页面。
  • driver.forward(): 前进到下一个页面。
  • driver.refresh(): 刷新当前页面。
  1. helium.go_to(url):导航到指定的网页
  2. helium.refresh():刷新当前页面
  3. helium.Window():浏览器对象窗口
    window = helium.Window()
    
    print(window.handle) #所有窗口句柄
    print(window.exists()) #浏览器窗口是否存在
    print(window.title) #浏览器title
    
  4. helium.switch_to(window):窗口切换
    window = helium.Window()
    helium.switch_to(helium.find_all(window)[1])
    
  5. helium.S(selector, belowto_right_of, above,to_left_of):用于创建一个选择器对象,选择器对象可以用于在网页上查找和操作元素
  • selector:用于指定要选择的元素的CSS选择器或其他选择方式,支持xpath、css
  • belowto_right_of:用于指定选择器对象位于另一个选择器对象的右下方。它接受一个选择器对象作为参数。
  • above:用于指定选择器对象位于另一个选择器对象的上方。它接受一个选择器对象作为参数。
  • to_left_of:用于指定选择器对象位于另一个选择器对象的左侧。它接受一个选择器对象作为参数。
    input = helium.S('input#verifyCode') #css
    input = helium.S('//input[@id="verifyCode"]') #xpath
    
    print(input.exists()) #元素是否存在
    print(input.top_left) #元素x、y坐标
    print(input.width) #元素宽
    print(input.height) #元素高
    print(input.web_element) #返回一个web对象,selenium.webdriver.remote.webelement.WebElement
    print(button.x) #元素x坐标
    print(button.y) #元素y坐标
    
  1. helium.write(text,into):在输入字段中输入文本
  • text:要输入的文本内容,可以是字符串类型。
  • into:要输入文本的输入字段的标识符,可以是placeholder、helium.Element对象。
    helium.write(text='test',into='请输入用户名') #根据输入框的placeholder定位元素并输入
    helium.write(text='test21',into=helium.S('//input[@id="verifyCode"]'))
    
  1. helium.wait_until(condition_fn, timeout_secs, interval_secs):等到给定的条件函数结果为真时
  • condition_fn:一个函数,用于定义等待的条件。该函数应返回一个布尔值,表示条件是否满足,如选择器对象中的 exists()
  • timeout_secs:等待的超时时间,以秒为单位。如果在超时时间内条件仍未满足,则等待操作将被中止。
  • interval_secs:轮询检查条件的时间间隔,以秒为单位。在每次检查之间会等待指定的时间间隔。
  1. helium.Config.implicit_wait_secs = 5:隐式等待
  2. helium.Button(text, below, to_right_of, above,to_left_of):用于表示网页上的按钮元素。通过创建helium.Button对象,可以在网页中查找和操作元素
  • text:按钮上显示的文本。如果未指定文本,则可以使用其他定位参数来定位按钮。
  • below:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的下方。
  • to_right_of:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的右侧。
  • above:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的上方。
  • to_left_of:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的左侧。
    button = helium.Button('百度一下')
    print(button.exists()) #button是否存在
    print(button.width) #button宽
    print(button.height) #button高
    print(button.web_element) #返回一个web对象,selenium.webdriver.remote.webelement.WebElement
    print(button.top_left) #元素x、y坐标
    print(button.is_enabled()) #是否启用
    print(button.x) #元素x坐标
    print(button.y) #元素y坐标
    
  1. helium.Text(text, below, to_right_of, above,to_left_of):用于表示网页上的文本元素。通过创建helium.Text对象,可以在网页中查找和操作元素
  • text:指定的文本。如果未指定文本,则可以使用其他定位参数来定位按钮。
  • below:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的下方。
  • to_right_of:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的右侧。
  • above:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的上方。
  • to_left_of:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的左侧。
    text = helium.Text('百度一下')
    
    print(text.exists())
    print(text.top_left)
    print(text.width)
    print(text.height)
    print(text.web_element)
    print(text.x)
    print(text.y)
    
  1. helium.TextField(label, below, to_right_of, abovee,to_left_of):用于表示网页上的textarea元素。通过创建helium.TextField对象,可以在网页中查找和操作元素
  • label:textarea的label。如果未指定label,则可以使用其他定位参数来定位按钮。
  • below:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的下方。
  • to_right_of:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的右侧。
  • above:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的上方。
  • to_left_of:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的左侧。
    text_field = helium.TextField()
    
    print(text_field.exists())
    print(text_field.web_element)
    print(text_field.width)
    print(text_field.height)
    print(text_field.top_left)
    print(text_field.x)
    print(text_field.y)
    print(text_field.is_enabled()) #是否开启
    print(text_field.is_editable()) #是否编辑
    
  1. helium.find_all(predicate):用于在当前网页中查找所有满足给定条件的元素,predicate是helium元素对象,如:S()、Button()、Text等
  2. helium.Link(text, below, to_right_of, above,to_left_of):用于表示网页上的textarea元素。通过创建helium.TextField对象,可以在网页中查找和操作元素
  • text:指定的文本。如果未指定文本,则可以使用其他定位参数来定位按钮。
  • below:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的下方。
  • to_right_of:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的右侧。
  • above:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的上方。
  • to_left_of:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的左侧。
    link = helium.Link('新闻')
    
    print(link.exists())
    print(link.web_element)
    print(link.top_left)
    print(link.width)
    print(link.height)
    print(link.href)
    print(link.x)
    print(link.y)
    
  1. helium.Point(x,y):表示和操作页面上的坐标点
  2. helium.ComboBox(label, below, to_right_of, above,to_left_of):用于表示网页上的下拉框。可以在网页中查找和操作元素
  • label:textarea的label。如果未指定label,则可以使用其他定位参数来定位按钮。
  • below:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的下方。
  • to_right_of:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的右侧。
  • above:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的上方。
  • to_left_of:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的左侧。
    combo_box = helium.ComboBox('下拉框')
    
    print(combo_box.exists())
    print(combo_box.web_element)
    print(combo_box.options)
    print(combo_box.width)
    print(combo_box.height)
    print(combo_box.top_left)
    print(combo_box.y)
    print(combo_box.x)
    print(combo_box.is_editable())
    
  1. helium.CheckBox(label, below, to_right_of, above,to_left_of):用于表示网页上的复选框。可以在网页中查找和操作元素
  • label:textarea的label。如果未指定label,则可以使用其他定位参数来定位按钮。
  • below:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的下方。
  • to_right_of:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的右侧。
  • above:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的上方。
  • to_left_of:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的左侧。
    check_box = helium.CheckBox('下拉框')
    
    print(check_box.exists())
    print(check_box.web_element)
    print(check_box.is_enabled())
    print(check_box.width)
    print(check_box.height)
    print(check_box.top_left)
    print(check_box.y)
    print(check_box.x)
    
  1. helium.Image(alt, below, to_right_of, above,to_left_of):用于表示网页上的图像。可以在网页中查找和操作元素
  • alt:图像的替代文本。在无法显示图像时,替代文本将作为图像的描述显示。默认为None,即没有替代文本。
  • below:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的下方。
  • to_right_of:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的右侧。
  • above:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的上方。
  • to_left_of:要定位按钮的元素的标识符或helium.Element对象。按钮将位于指定元素的左侧。
    image = helium.Image('下拉框')
    
    print(image.exists())
    print(image.web_element)
    print(image.width)
    print(image.height)
    print(image.top_left)
    print(image.y)
    print(image.x)
    
  1. helium.click(element):用于模拟点击指定的元素
  2. helium.doubleclick(element):用于模拟双击指定的元素
  3. helium.select(combo_box, value):用于选择下拉框中的选项
  4. helium.rightclick(element):用于模拟鼠标右键点击
  5. helium.hover(element):用于模拟鼠标悬浮
  6. helium.scroll_up(num_pixels):用于模拟向上滚动
  7. helium.scroll_down(num_pixels):用于模拟向下滚动
  8. helium.scroll_left(num_pixels):用于模拟向左滚动
  9. helium.scroll_right(num_pixels):用于模拟向右滚动
  10. helium.drag(element,to):用于模拟拖拽操作
  • element:要拖拽的元素
  • to:要拖拽到的目标位置,可以是元素
  1. helium.drag_file(file_path, to):用于拖拽文件
  • file_path:文件路径
  • to:要拖拽到的目标位置,可以是元素
  1. helium.attach_file(file_path, to):用于模拟上传文件
  • file_path:文件路径
  • to:要拖拽到的目标位置,可以是元素
  1. helium.Alert():用于处理网页弹窗
    alert = helium.Alert()
    
    alert.exists()
    alert.accept()
    alert.dismiss()
    
  2. helium.press(key):用于模拟键盘按键操作
    from selenium.webdriver.common.keys import Keys
    
    '''
    NULL         = Keys.NULL
    CANCEL       = Keys.CANCEL
    HELP         = Keys.HELP
    BACK_SPACE   = Keys.BACK_SPACE
    TAB          = Keys.TAB
    CLEAR        = Keys.CLEAR
    RETURN       = Keys.RETURN
    ENTER        = Keys.ENTER
    SHIFT        = Keys.SHIFT
    LEFT_SHIFT   = Keys.LEFT_SHIFT
    CONTROL      = Keys.CONTROL
    LEFT_CONTROL = Keys.LEFT_CONTROL
    ALT          = Keys.ALT
    LEFT_ALT     = Keys.LEFT_ALT
    PAUSE        = Keys.PAUSE
    ESCAPE       = Keys.ESCAPE
    SPACE        = Keys.SPACE
    PAGE_UP      = Keys.PAGE_UP
    PAGE_DOWN    = Keys.PAGE_DOWN
    END          = Keys.END
    HOME         = Keys.HOME
    LEFT         = Keys.LEFT
    ARROW_LEFT   = Keys.ARROW_LEFT
    UP           = Keys.UP
    ARROW_UP     = Keys.ARROW_UP
    RIGHT        = Keys.RIGHT
    ARROW_RIGHT  = Keys.ARROW_RIGHT
    DOWN         = Keys.DOWN
    ARROW_DOWN   = Keys.ARROW_DOWN
    INSERT       = Keys.INSERT
    DELETE       = Keys.DELETE
    SEMICOLON    = Keys.SEMICOLON
    EQUALS       = Keys.EQUALS
    NUMPAD0      = Keys.NUMPAD0
    NUMPAD1      = Keys.NUMPAD1
    NUMPAD2      = Keys.NUMPAD2
    NUMPAD3      = Keys.NUMPAD3
    NUMPAD4      = Keys.NUMPAD4
    NUMPAD5      = Keys.NUMPAD5
    NUMPAD6      = Keys.NUMPAD6
    NUMPAD7      = Keys.NUMPAD7
    NUMPAD8      = Keys.NUMPAD8
    NUMPAD9      = Keys.NUMPAD9
    MULTIPLY     = Keys.MULTIPLY
    ADD          = Keys.ADD
    SEPARATOR    = Keys.SEPARATOR
    SUBTRACT     = Keys.SUBTRACT
    DECIMAL      = Keys.DECIMAL
    DIVIDE       = Keys.DIVIDE
    F1           = Keys.F1
    F2           = Keys.F2
    F3           = Keys.F3
    F4           = Keys.F4
    F5           = Keys.F5
    F6           = Keys.F6
    F7           = Keys.F7
    F8           = Keys.F8
    F9           = Keys.F9
    F10          = Keys.F10
    F11          = Keys.F11
    F12          = Keys.F12
    META         = Keys.META
    COMMAND      = Keys.COMMAND
    '''
    helium.press(Keys.ENTER)
    

你可能感兴趣的:(python,python)