自动化测试----selenium(一)

目录

什么是自动化测试

单元测试

接口自动化测试

UI自动化测试

selenium介绍

webdriver API

元素的定位

 操作测试对象

添加等待

打印信息

对浏览器的操作

键盘事件

鼠标事件


什么是自动化测试

自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。

自动化测试包括UI自动化,接口自动化,单元测试自动化。

单元测试

最大的投入应该在单元测试上,单元测试运行的频率也更加高。java的单元测试框架是Junit。

接口自动化测试

接口测试就是API测试,相对于UI自动化API自动化更加容易实现,执行起来也更稳定。
接口自动化测试的特点:

  • 可在产品前期,接口完成后介入
  • 用例维护量小
  • 适合接口变动较小,界面变动频繁的项目

UI自动化测试

UI自动化测试更加贴近用户的需求和软件系统的实际业务。并且有时候我们不得不进行UI层的测试。

UI自动化测试的特点

  • 用例维护量大
  • 页面相关性强,必须后期项目页面开发完成后介入
  • UI测试适合与界面变动较小的项目

UI自动化的好处:

  1. 减少人为出错的几率,创建一个可靠的测试过程
  2. 可以进行繁琐的测试(比如测试过程一致,每次输入数据不同,ddt)
  3. 可以进行大量重复的测试,回归测试
  4. 可以节省人力资源
  5. 脚本的复用性
  6. 可以进行手工测试很难执行的测试(精准计时)

selenium介绍

Selenium是web应用中基于UI的自动化测试框架,支持多平台、多浏览器、多语言。

现在我们说起selenium,一般指的是Selenium2.0。它有由Selenium IDE,Webdriver,Selenium Grid组成。

webdriver API

首先看一个简单是自动化测试脚本

# coding = utf-8    //防止乱码,在编辑器里面可以不用加,因为编辑器默认的就是UTF-8模式。
from selenium import webdriver  //导入webdriver工具包,这样就可以使用里面的API
import time    
browser = webdriver.Firefox()  
//获得被控制浏览器的驱动,这里是获得Firefox的,当然还可以获得Chrome浏览器,不过要想使这一段代码有效,必须安装相应的浏览器驱动
time.sleep(3)
browser.get("http://www.baidu.com")
time.sleep(3)
browser.find_element_by_id("kw").send_keys("selenium")  
//通过元素的ID定位想要操作的元素,并且向元素输入相应的文本内容 。
time.sleep(3)
browser.find_element_by_id("su").click()
//通过元素的ID定位到元素,并进行点击操作。
browser.quit()   //退出并关闭窗口

注:browser.close()也可以关闭窗口。两者的区别是:close方法关闭当前的浏览器窗口,quit方法不仅关闭窗口,还会彻底的退出webdriver,释放与driverserver之间的连接。所以简单来说quit是更加彻底的close,quit会更好的释放资源。

元素的定位

原则:不管用什么方式定位,这个方式必须全局唯一

常用的定位元素的方法有:

  • id   如果存在,可以全局唯一定位一个元素
  • name  存在并且全局唯一才可以定位到
  • class name  存在并且全局唯一才可以定位到
  • link text   必须是链接,且链接内容全局唯一,才可以定位到
  • partial link text  必须是链接,且链接内容全局唯一,才可以定位到(链接的部分内容就可以)
  • tag name   必须全局唯一才可以定位到(标签名)
  • xpath   任何一个元素都可以定位到(右键-copy-copyXpath)
  • css selector    (右键-copy-copyselector)
#coding=utf-8
from selenium import webdriver
import time
browser = webdriver.Chrome()
browser.get("http://www.baidu.com")
#########百度输入框的定位方式##########
#通过id 方式定位
browser.find_element_by_id("kw").send_keys("selenium")
#通过name 方式定位
browser.find_element_by_name("wd").send_keys("selenium")
#通过tag name 方式定位
browser.find_element_by_tag_name("input").send_keys("selenium") 不能成功,因为
input太多了不唯一。
#通过class name 方式定位
browser.find_element_by_class_name("s_ipt").send_keys("selenium")
#通过CSS 方式定位
browser.find_element_by_css_selector("#kw").send_keys("selenium")
#通过xphan 方式定位
browser.find_element_by_xpath("//*[@id='kw']").send_keys("selenium")
#通过link_text 方式定位
browser.find_element_by_link_text("新闻").click()
############################################
browser.find_element_by_id("su").click()
time.sleep(3)
browser.quit()

 操作测试对象

webdriver 中比较常用的操作对象的方法有下面几个:

  1. send_keys() 向元素发送信息
  2. click()点击元素
  3. submit()提交表单
  4. clear()清除元素的内容
  5. text 获取元素的内容

添加等待

固定等待 sleep()

我们需要引入time包,固定等待必须等够括号中的时间

import time
time.sleep(3)

智能等待

通过implicitly_wait() 方法就可以方便的实现智能等待;implicitly_wait()的用法比time.sleep()
更智能,后者只能选择一个固定的时间的等待,前者可以在一个时间范围内智能的等待。当脚本执行到某个元素定位时,如果元素可以定位,则继续执行;如果元素定位不到,则它以轮询的方式不断的判断元素是否被定位到。直到超出设置的时长。

browser.implicitly_wait(30)  //智能等待30秒

打印信息

打印title

#coding = utf-8
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
print(driver.title) # 把页面title 打印出来

打印URL

#coding = utf-8
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
print(driver.current_url) #打印url

对浏览器的操作

浏览器最大化

browser.maximize_window()

设置浏览器宽和高

browser.set_window_size(width, high)  //数字为像素点

操作浏览器前进、后退

#浏览器的前进
browser.forward()
#浏览器的后退
browser.back()

控制浏览器滚动条

#将浏览器滚动条滑到最顶端
document.documentElement.scrollTop=0
#将浏览器滚动条滑到最底端
document.documentElement.scrollTop=10000

键盘事件

要使用键盘按键,必须引入keys 包:
from selenium.webdriver.common.keys import Keys

通过send_keys()调用按键:
send_keys(Keys.TAB) # TAB
send_keys(Keys.ENTER) # 回车
send_keys(Keys.SPACE) #空格键
send_keys(Keys.ESCAPE) #回退键(Esc)
......

键盘组合键用法

send_keys(Keys.CONTROL,'a') #全选(Ctrl+A)
send_keys(Keys.CONTROL,'c') #复制(Ctrl+C)
send_keys(Keys.CONTROL,'x') #剪贴(Ctrl+X)
send_keys(Keys.CONTROL,'v') #粘贴(Ctrl+V)

鼠标事件

要使用鼠标事件需要导入工具包:
from selenium.webdriver.common.action_chains import ActionChains

#coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import time
driver = webdriver.Chrome()
driver.get("http://news.baidu.com")
qqq =driver.find_element_by_xpath(".//*[@id='s_btn_wr']")
ActionChains(driver).context_click(qqq).perform() #右键
ActionChains(driver).double_click(qqq).perform() #双击
#定位元素的原位置
element = driver.find_element_by_id("s_btn_wr")
#定位元素要移动到的目标位置
target = driver.find_element_by_class_name("btn")
#执行元素的移动操作
ActionChains(driver).drag_and_drop(element, target).perform()

你可能感兴趣的:(selenium,测试工具,java)