自动化测试-----selenium

什么是自动化测试?

自动化测试是将人为驱动的测试行为来转化为机器执行的过程.作为一个测试人员,做自动化一般是指接口自动化与UI自动化。

常见的自动化测试工具:selenium,jmeter,Loadrunner等

selenium是一个web的自动化测试工具

自动化测试的优缺点?

优点:
1.对程序的回归测试更加方便
2.可以运行更多更加繁琐的测试,可以在较短的时间内进行更多的测试
3.可以执行一些手工测试困难或者并不可能进行的测试.比如,对于大量用户的测试,不可能同时让足够多的测试人员同时进行测试,但是却可以通过自动化测试模拟同时有许多用户,从而达到测试的目的 .
4.可以更好的利用资源,节省时间和人力,提高测试的复用性和一致性.
缺点:
1.并不可以完全取代手工测试,手工测试比自动化测试发现的bug多
2.自动化测试对于测试质量的依赖性大,得在程序相对稳定时应用
3.自动化测试比手动测试更加存脆弱,需要实时进行维护

自动化测试的意义,开始之前需要做哪些工作?

意义:结合优点来说

1.方便对程序进行回归测试

2.可以执行手工测试困难或者不可能实现的测试环节

3.能够更好的利用资源,节省人力和时间

准备:

执行自动化测试之前首先要判断该项目是否适合推广自动化测试,

实施自动化测试的前提条件:需求变动不频繁、项目周期足够长、自动化测试脚本可重复使用

之后对项目进行需求分析,指定测试计划,搭建自动化测试框架,设计测试用例,执行测试,进行测试评估

自动化测试的两个类型?

1.接口自动化 实施阶段:后端开发完成之后实施

2.UI自动化 实施阶段:前端开发完成之后实施

共同点:都得在项目功能相对稳定的情况下实施,保证自动化脚本的复用性

selenium

selenium是一个web的自动化测试工具,支持多平台、多浏览器、多语言去实现自动化测试.

selenium的优点?

1.免费,小巧

2.支持多语言:支持C,java,ruby,python,C#等

3.支持多平台:windows,linux,Mac

4.支持多浏览器:ie,chrome,forefix,safari

5.支持分布式测试用例的执行,selenium grid

selenium2(selenium1+WebDriver)

Selenium2将浏览器原生的API封装成WebDriver API,可以直接操作浏览器页面里的元素.

Selenium IDE也将支持 WebDriver API,包括将录制生成的测试用例 导出为 WebDriver 所支持的各种编程语言(Ruby、Python、C# 和 Java)(仅个人使用,实际开发中很少使用)

WebDriver工作原理?

出租车司机的例子:司机不知道路线,乘客指挥司机,司机驱动出租车

脚本(乘客)将指令传递给webdriver(司机),webdriver促使浏览器(出租车)执行脚本命令.

元素的定位(自动化测试的核心)

使用元素定位:要求元素拥有该属性并且全局唯一

定位元素的一系列方法:

  • id
  • name
  • class name
  • tag name
  • link text
  • xpath
  • css selector

在这里插入图片描述

  #要想使用selenium 的webdriver 里的函数,首先把包导进
    from selenium import webdriver
    import time
    #选定对应的浏览器及对应网址
    driver = webdriver.Firefox()
    driver .get("https://www.baidu.com/")
    
    #放大浏览器窗口
    driver.maximize_window()
    time.sleep(3)
    
    #脚本书写元素定位
    #使用元素定位:要求元素拥有该属性并且全局唯一
    
    # #通过id定位
    driver.find_element_by_id("kw").send_keys("三十而已")
    driver.find_element_by_id("su").click()
    
    #使用name来定位,并不是所有界面的元素都有id和name
    #所有元素的id如果有,就一定是唯一的
    driver.find_element_by_name("wd").send_keys("yamy")
    driver.find_element_by_id("su").click()
    
    #使用classname来定位
    #此class属性在全局不唯一,会冲突,所以定位不到,失败
    driver.find_element_by_class_name("s_ipt nobg_s_fm_hover").send_keys("王一博")
    driver.find_element_by_class_name("btn self-btn bg s_btn btn_h btnhover").click()
    
    #使用linktest  源码的开头是a
    #加u开头表示这是一串汉字,保证不会产生乱码
    driver.find_element_by_link_text(u"关于百度").click()
    #部分连接定位,如果页面只有一个关于字段,则可以定位到,若页面有多个关于字段,就无法定位到
    driver.find_element_by_partial_link_text("关于").click()
    
    #使用 tag name来定位
    driver.find_element_by_tag_name("input").send_keys("苏轼")
    driver.find_element_by_id("su").click()
    
    #使用Xpath来定位 检查--> copy--> Xpath  注意复制过来之后引号要对应
    #Xpath永远可以定位到,因为他是唯一的
    #Xpath是该元素在页面上的路径,//省略前面的路径,后面根据id,name或者...来唯一定位
    driver.find_element_by_xpath('//*[@id="kw"]').send_keys("李白")
    driver.find_element_by_xpath('//*[@id="su"]').click()
    
    #css定位
    driver.find_element_by_css_selector('#kw').send_keys("杜甫")
    driver.find_element_by_css_selector('#su').click()
    
    time.sleep(3)
    #自动关闭浏览器,
    #quit方法不仅关闭窗口,还会彻底的退出webdriver
    # quit是更加彻底的close,quit会更好的释放资源
    driver.quit()

操作测试对象

  • click 点击对象
  • send_keys 在对象上模拟按键输入
  • clear 清楚对象中的内容
  • submit 提交表单 在源码中如果type = submit,那么submit 提交 == 点击 click 效果相同
  • text 用于获取元素的文本信息
  from selenium import webdriver
  import  time
  
  driver = webdriver.Firefox()
  driver.get("https://www.baidu.com/")
  
  #放大浏览器窗口
  driver.maximize_window()
  time.sleep(3)
  
  #操作测试对象练习
  driver.find_element_by_id("kw").send_keys("白起")
  driver.find_element_by_id("su").click()
  #不想搜索白起了,想换一个搜,现将白起clean(),再进行后续操作
  #clean():清除百度搜索框中的内容
  time.sleep(3)
  driver.find_element_by_id("kw").clear()
  driver.find_element_by_id("kw").send_keys("张飞")
  driver.find_element_by_id("su").click()
  
  #在源码中如果type = submit,那么
  #submit 提交 == 点击 click 效果相同
  driver.find_element_by_id("kw").send_keys("白起")
  driver.find_element_by_id("su").submit()
  
  #text 获取元素文本
  text = driver.find_element_by_class_name("s-bottom-layer-left").text
  print("text内容为:"+text)
  
  time.sleep(3)
  #关闭浏览器
  driver.quit()

添加等待

需要引入time包: import time

两种等待的区别:

  • 固定等待:time.sleep() //设置等待几秒钟,设置几秒等待几秒
  • 智能等待:implicatiy_wait(6) //等待0-6秒中,页面需要几秒打开就等待几秒,打开成功就不等待了,超过6秒还没打开就会报错
  #添加等待
  #固定等待:time.sleep() 设置等待几秒钟
  #智能等待:implicity_wait(6) 等待的时间为0-6秒
  driver.find_element_by_id("kw").send_keys("白起")
  driver.find_element_by_id("su").submit()
  #智能等待一下,脚本的执行时间比页面的时间要快
  #等待0-10秒,页面需要几秒就几秒打开,页面加载成功就不等待了,10秒加载不完就会报错
  driver.implicitly_wait(10)
  driver.find_element_by_link_text(u"人物生平").click()

打印信息 打印tile及url

#打印信息 title 和 url
  title = driver.title
  print("title=" + title)
  
  #打印的是上一个页面,不是当前页面(挺奇怪但不深究)
  url = driver.current_url
  print("url =" +url)

在这里插入图片描述

浏览器操作

  • 浏览器最大化
  • 设置浏览器宽,高
  • 控制浏览器滚动条
   #浏览器的缩小
      driver.minimize_window()
      time.sleep(6)
      #设置浏览器的宽和高,宽400,高800
      driver.set_window_size(400,800)
      
      #控制浏览器的滚动条,通过js来控制的
      #将页面滚动条拖到底部
      js="var q=document.documentElement.scrollTop=10000"
      driver.execute_script(js)

键盘按键用法

要调用键盘按键先引入keys包

   #需要引入key包
    from selenium.webdriver.common.keys import Keys

通过send_keys()调用按键:

  • send_keys(Keys.TAB) # TAB
  • send_keys(Keys.ENTER) # 回车
   driver.find_element_by_id("kw").send_keys("关羽")
    driver.find_element_by_id("su").click()
    
    #ctrl+a 选中
    driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"a")
    time.sleep(3)
    
    #ctrl + x 剪贴
    driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"x")
    time.sleep(3)
    
    #重新再输入框中输入想查询的内容
    driver.find_element_by_id("kw").send_keys("李商隐")
    driver.find_element_by_id("su").click()

鼠标事件

  • context_click() 右击
  • double_click() 双击
  • drag_and_drop() 拖动
  • move_to_element() 移动
   #鼠标事件:
      driver.find_element_by_id("kw").send_keys("孙尚香")
      #定位一下"百度一下"按钮
      su1 = driver.find_element_by_id("su")
      #右击
      ActionChains(driver).context_click(su1).perform()
      time.sleep(6)
      #双击
      ActionChains(driver).double_click(su1).perform()

注意一个点:
在类似于邮箱登录编写自动化测试脚本时,id值都是随机变化生成的,只能写对应的API语句,无法真正的进行自动化测试.这样设计的目的是为了防止密码泄露,暴力解析密码.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值