分享一个神器——Selenium 自动化测试工具

发表于:2019-3-25 17:24

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:今朝    来源:思否

  最近写项目的时候,用到了Selenium,一个 Web 端的自动化测试工具,直接运行在浏览器中,用来模拟用户操作。
  Selenium 不仅仅可以用作自动化测试,还有很多种玩法,比如 Python 的爬虫,实现某商品的秒杀,甚至是页游外挂脚本,只要是基于浏览器操作,只有你想不到,没有 Selenium 做不到,就是这么强大!
  直奔主题,我们来感受一下 Selenium。
  安装
  Python 的安装就不再科普,自行百度
  通过 pip 命令安装 Selenium
 pip install selenium
  安装浏览器驱动
  Selenium 支持的浏览器很多,Firefox、Chrome、IE、Opera 等等。
  作为一个程序员,想必大多常用的浏览器都是 Chrome,我的电脑是 Mac,安装 Chrome 浏览器驱动,直接执行 brew cask install chromedriver 即可。
  更多 Selenium 浏览器驱动下载,请点击。
  示例
  先来一段简单的代码。
   from selenium import webdriver
  from selenium.webdriver.common.keys import Keys
  browser = webdriver.Chrome()
  browser.get('https://www.baidu.com')
  browser.find_element_by_id('kw').send_keys('php')
  browser.find_element_by_id('kw').send_keys(Keys.ENTER)
  运行这段代码,你会发现自动打开 Chrome,并访问了百度,在输入框输入了 php,紧接着跳转到了搜索的结果页。
  常用方法
  1. 页面元素定位
  Selenium 常用的元素定位方法
  find_element_by_id()
  find_element_by_class_name()
  find_element_by_tag_name()
  find_element_by_css_selector()
  find_element_by_tag_name()
  比如百度页面的 HTML:
  <input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
  我们可以这样定位
   element = driver.find_element_by_id('kw')
  element = driver.find_element_by_class_name('s_ipt')
  element = driver.find_element_by_css_selector('.s_ipt')  获取元素之后,就是针对于元素的操作了,简单可以划分两类操作,鼠标事件和键盘事件等等。
  2. 鼠标操作
   element.click()  单击;
  element.context_click() 右击;
  element.double_click() 双击;
  element.drag_and_drop() 拖动;
  element.move_to_element() 鼠标悬停
  3. 输入和键盘事件
  输入文本:
 element.send_keys("Hello world")
  键盘操作:
   element.send_keys(Keys.ENTER) 回车
  element.send_keys(Keys.CONTROL,‘a’) 全选(Ctrl+A)
  element.send_keys(Keys.CONTROL,‘c’) 复制(Ctrl+C)
  element.send_keys(Keys.CONTROL,‘x’) 剪切(Ctrl+X)
  element.send_keys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V)
  element.send_keys(Keys.F1) 键盘 F1
  …… 等等
  窗口切换
 driver.switch_to_window("windowName")
  
   # 获取所有打开窗口句柄
  all_handles = driver.window_handles
  # 获取当前窗口句柄
  current_windows = driver.current_window_handle
  页面等待
  现在很多项目都是前后端分离的,HTML 动态渲染,如果我们打开某页面,直接选取元素操作,就会抛出异常,所以设置页面等待是很有必要的。
  等待分为两种类型:显式等待和隐式等待。
  显式等待: 针对页面的某一元素,每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常
   from selenium import webdriver
  from selenium.webdriver.common.by import By
  from selenium.webdriver.support.ui import WebDriverWait
  from selenium.webdriver.support import expected_conditions as EC
  driver = webdriver.Firefox()
  driver.get("http://www.baidu.com")
  element = WebDriverWait(driver, 5, 0.5).until(
  EC.presence_of_element_located((By.ID, "kw"))
  )
  element.send_keys('selenium')
  driver.quit()
  隐式等待:并不针对页面上的某一元素进行等待,脚本执行到某个元素定位时,如果元素可以定位,则继续执行;如果元素定位不到,则它将以轮询的方式不断地判断元素是否被定位,直到超出设置时长,抛出异常。
   # 设置隐式等待为10秒
  driver.implicitly_wait(10)
  Selenium 还有更多的操作,比如设置浏览器 cookie、文件上传、窗口截图等待,这里就不多介绍了,有兴趣的话,大家可以去看看相关。

      上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号