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

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

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 webdriverdriver = webdriver.Chrome(executable_path='./etc/chromedriver.exe')
  • 执行测试步骤

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

  • 断言

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


  • 1. 常用 API

    1. 访问网站

    from selenium import webdriverdriver = 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 WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECelement = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'kw')))
  • 隐式等待

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

    driver.implicitly_wait(5)
  • 显式等待

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

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

  • 10. Action 接口

    10.1 操作流程

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

    案例:拖拽操作

    from selenium.webdriver import ActionChainsaction = 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 InnoDB 数据更新导致锁表
    查看>>
    Mysql Innodb 锁机制
    查看>>
    MySQL InnoDB中意向锁的作用及原理探
    查看>>
    MySQL InnoDB事务隔离级别与锁机制深入解析
    查看>>
    Mysql InnoDB存储引擎 —— 数据页
    查看>>
    Mysql InnoDB存储引擎中的checkpoint技术
    查看>>
    Mysql InnoDB存储引擎中缓冲池Buffer Pool、Redo Log、Bin Log、Undo Log、Channge Buffer
    查看>>
    MySQL InnoDB引擎的锁机制详解
    查看>>
    Mysql INNODB引擎行锁的3种算法 Record Lock Next-Key Lock Grap Lock
    查看>>
    mysql InnoDB数据存储引擎 的B+树索引原理
    查看>>
    mysql innodb通过使用mvcc来实现可重复读
    查看>>
    mysql insert update 同时执行_MySQL进阶三板斧(三)看清“触发器 (Trigger)”的真实面目...
    查看>>
    mysql interval显示条件值_MySQL INTERVAL关键字可以使用哪些不同的单位值?
    查看>>
    Mysql join原理
    查看>>
    MySQL Join算法与调优白皮书(二)
    查看>>
    Mysql order by与limit混用陷阱
    查看>>
    Mysql order by与limit混用陷阱
    查看>>
    mysql order by多个字段排序
    查看>>
    MySQL Order By实现原理分析和Filesort优化
    查看>>
    mysql problems
    查看>>