博客
关于我
python自动化(三)web自动化:2.web自动化工具selenium讲解
阅读量:625 次
发布时间:2019-03-14

本文共 3329 字,大约阅读时间需要 11 分钟。

Selenium聚合教程

1. 什么是 Selenium?

Selenium 是一个用于测试 Web 应用程序的工具。其独特之处在于,它能够直接在浏览器中执行操作,与真正的用户操作一模一样。支持的浏览器包括 IE(7,8,9,10,11)、Firefox、Safari、Google Chrome、Opera、Edge 等。

2. Selenium 的三大组件

  • WebDriver

    WebDriver 是 Selenium 提供的核心 API,用来操作浏览器。它允许你执行如打开页面、定位元素、点击按钮等操作,是我们编写自动化测试用例的主要工具。

  • IDE

    IDE 是 Selenium 提供的一个插件,允许用户录制并回放用户操作。它对于新手来说堪称完美的起点。

  • Grid

    Grid 是 Selenium 的分布式工具,允许你在多个浏览器上并行执行测试用例。它极大地提升了测试效率。

  • 3. Selenium 的工作原理

    Selenium 的核心思想是模拟用户操作。它通过驱动浏览器,发送指令并等待页面状态变化。这种方式确保了操作更加自然,避免了传统测试工具的局限性。

    4. 环境准备

  • 安装 Selenium

    在 Python 中安装 Selenium,可以使用 pip 终端命令:

    pip install selenium
  • 配置浏览器驱动

    依据你的浏览器选择合适的驱动,下载 ZIP 包,并将驱动添加到环境变量或在代码中指定路径。

  • 5. 编写测试用例的步骤

  • 导入依赖

    确保导入必要的模块,如 selenium.webdriver.Chrome

  • 生成驱动

    初始化浏览器驱动,可以通过固定路径或环境变量指定浏览器位置:

    from selenium import webdriver
    driver = webdriver.Chrome(executable_path='./etc/chromedriver.exe')
  • 执行测试步骤

    使用 WebDriver 的 API 指令浏览器操作,如打开页面、定位元素并进行输入等。

  • 断言

    确保测试结果正确,常用断言方式包括检查页面标题、元素属性或文本内容等。


  • 1. 常用 API

    1. 访问网站

    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.get('https://www.baidu.com/')

    2. 元素定位API

    Selenium 提供多种元素定位方式,常用有:idnameclass namelink textpartial link texttag namexpathcss_selector

    弹性定位示例

    element = driver.find_element_by_id('kw')
    # 或者
    element = driver.find_element(By.ID, 'kw')

    Xpath 和 css_selector 示例

    # xpath 示例
    element = driver.find_element_by_xpath('//div[@id="wraf"]')
    # css_selector 示例
    element = driver.find_element_by_css_selector('#wraf > div')

    2. 鼓励操作

    鼓励点击

    element = driver.find_element_by_id('su')
    element.click()

    输入内容

    element = driver.find_element_by_id('kw')
    element.send_keys('自动化测试')

    清空内容

    element = driver.find_element(By.ID, 'kw')
    element.send_keys('自动化测试')
    sleep(2)
    element.clear()

    退出浏览器

    driverquit()

    获取页面标题

    title = driver.title

    最大化浏览器窗口

    driver.maximize_window()

    等待方式

  • 页面元素加载

    使用 WebDriverWaitexpected_conditions 控cassertion:

    from selenium.webdriver.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'kw')))
  • 隐式等待

    默认等待时间为元素加载完成:

    driver.implicitly_wait(5)
  • 显式等待

    通过指定方法和等待时间硬性等待:

    from selenium.webdriver.wait import WebDriverWait
    wait = WebDriverWait(driver, 10)
    element = wait.until(EC.presence_of_element_located((By.ID, 'kw')))

  • 10. Action 接口

    10.1 操作流程

    Selenium 提供 ActionChains 类,允许你编写复杂操作如拖拽、右键点击等。

    案例:拖拽操作

    from selenium.webdriver import ActionChains
    action = ActionChains(driver)
    action.drag_and_drop(dragger, drop_element).perform()

    20. 断言方式

    1. 视觉断言

    页面标题断言

    assert driver.title == '百度一下,你就知道'

    元素文本断言

    element = driver.find_element_by_id('kw')
    assert element.text == '搜索'

    2. 属性断言

    assert element.get_attribute('placeholder') == '输入设置'

    19. 截图功能

    获取当前页面截图,保存为图片文件:

    driver.get_screenshot_as_file('./test.png')

    18. 处理多窗口

    1. 各窗口切换

    current_handle = driver.current_window_handle
    # 切换到新窗口
    driver.switch_to_window(new_handle)

    2. 关闭其他窗口

    driver.switch_to.default_window()

    17. 处理内嵌框架

    1. 切换框架

    driver.switch_to.frame(element)
    # 或者
    driver.switch_to.frame('frame_id')

    2.退出框架

    driver.switch_to.parent_frame()

    16. 处理弹窗

    # 获取弹窗
    alert = driver.switch_to.alert()
    # 接受弹窗
    alert.accept()

    15. 处理文件上传

    # 定位文件输入框
    input = driver.find_element_by_id('file_input')
    # 上传文件
    input.send_keys('/路径/到/文件')

    14. 执行 JavaScript

    1. 执行脚本

    driver.execute_script('javascript代码')

    2. 获取结果

    result = driver.execute_script('return javascript代码')

    通过以上方法,可以全面掌握 Selenium 的核心功能。如果有更多具体场景需求,请参考 Selenium 官方文档

    转载地址:http://cxvoz.baihongyu.com/

    你可能感兴趣的文章
    MySQL 数据类型和属性
    查看>>
    mysql 敲错命令 想取消怎么办?
    查看>>
    Mysql 整形列的字节与存储范围
    查看>>
    mysql 断电数据损坏,无法启动
    查看>>
    MySQL 日期时间类型的选择
    查看>>
    Mysql 时间操作(当天,昨天,7天,30天,半年,全年,季度)
    查看>>
    MySQL 是如何加锁的?
    查看>>
    MySQL 是怎样运行的 - InnoDB数据页结构
    查看>>
    mysql 更新子表_mysql 在update中实现子查询的方式
    查看>>
    MySQL 有什么优点?
    查看>>
    mysql 权限整理记录
    查看>>
    mysql 权限登录问题:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
    查看>>
    MYSQL 查看最大连接数和修改最大连接数
    查看>>
    MySQL 查看有哪些表
    查看>>
    mysql 查看锁_阿里/美团/字节面试官必问的Mysql锁机制,你真的明白吗
    查看>>
    MySql 查询以逗号分隔的字符串的方法(正则)
    查看>>
    MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT 、分页查询的优化、合理使用连接、子查询的优化)(上)
    查看>>
    mysql 查询数据库所有表的字段信息
    查看>>
    【Java基础】什么是面向对象?
    查看>>
    mysql 查询,正数降序排序,负数升序排序
    查看>>