自动化测试selenium

1.什么是自动化测试?

在预设的条件(自动化脚本)下运行系统,预设的条件包括正常的和异常的情况,不需要手工干涉,机器就可以执行。

自动化测试selenium_第1张图片

金字塔越往下效率越高,因为测试的往下是内核的东西

所以要把主要的精力放在单元测试的自动化 

单元测试:

对程序最小的单元模块进行测试

java的单元测试框架是Junit   //自己学习

接口测试:

测试时间段:在项目前期接口开发而成就可以开始进行测试

用例维护量比较少(与UI测试比较)

适合的项目:接口变动较少的项目

UI自动化

对系统的界面元素进行操作,模拟用户的使用,完成功能的正常和异常测试。

测试时间段:项目后期,项目完成前后端的开发和联调后‘

用例维护量:比较大

适合的项目:适合界面元素变动小的项目

2.UI自动化的好处

(1) 进行大量重复的测试,进行回归测试

(2) 减少人为出错的几率,创建一个可靠的测试过程

(3) 可以进行繁琐的测试。(比如测试过程一致,每次输入的数据不同,ddt)

(4) 进行手工测试很难执行的测试。(精准计时)

(5) 节省资源(人力资源)

(6) 脚本的复用性(脚本复用性越大,价值越高)

3.自动化框架

RoBotFramework 关键字驱动,底层实现语言Python。

Django 接口 Python

selenium unittests Python

4.为什么选择selenium?

免费,小巧,容易安装

支持多语言:java C#  ruby  JavaScript Python 

支持多平台:Chrome Firefox edge Opera Safari

支持多浏览器多平台的好处?

可以进行兼容性测试

支持分布式测试:selenium Grid

4.webdriver的原理

(1)运行脚本,把浏览器绑定到一个端口,这个端口就是浏览器的remote server

(2)脚本通过commandexecutor,向浏览器发送HTTP请求,控制浏览器进行一系列操作

(3)浏览器驱动把指令解析成web service的命令,驱动浏览器进行一系列的操作

自动化测试selenium_第2张图片

5.selenium IDE

录制自动化脚本的工具 1.简单的自动化测试录制(但是不常用)

点击第一个,创建一个工程

自动化测试selenium_第3张图片

 自动化测试selenium_第4张图片

 自动化测试selenium_第5张图片

点击START RECORDING

自动化测试selenium_第6张图片

搜索王心凌之后停止

自动化测试selenium_第7张图片 输入名字点击运行,跑一下

这就是简单的录制

6.webdriver的原理

自动化测试selenium_第8张图片

7.第一个脚本

 打开百度搜索selenium

自动化测试selenium_第9张图片

8.写脚本

(1)定位元素的方式(原则:必须全局唯一)(问:定位元素的方式有哪些)

自动化测试selenium_第10张图片


from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
time.sleep(3)
#通过id来定位,全局唯一,可以唯一定位一个元素
#driver.find_element_by_id("kw").send_keys("迪丽热巴")
#time.sleep(3)
#driver.find_element_by_id("su").click()
#通过name来定位,name又能不全局唯一
#driver.find_element_by_name("wd").send_keys("赵盼儿")
#driver.find_element_by_id("su").click()
#tag_name定位
#driver.find_element_by_tag_name("input").send_keys("孙二娘")
#driver.find_element_by_tag_name("input").click()
#class name
#driver.find_element_by_class_name("s_ipt").send_keys("孙二娘")
#下面这个会失败,要用id定位
#driver.find_element_by_class_name("btn self-btn bg s_btn").click()
#link text
#driver.find_element_by_link_text("hao123").click()
#partial link text
#driver.find_element_by_partial_link_text("123").click()
#xpath  任何元素都可以定位
#driver.find_element_by_xpath("//*[@id='kw']").send_keys("赵盼儿")
#driver.find_element_by_xpath("//*[@id='su']").click()
driver.find_element_by_css_selector("#kw").send_keys("双笙")
driver.find_element_by_css_selector("#su").click()
time.sleep(5)
driver.quit()

(2)操作测试对象

a.send_keys()  向元素发送消息

b.click()   点击元素

c.submit()  提交表单

d.clear()   清除元素内容

(3)添加等待

a.sleep休眠(固定休眠)(必须等够括号里规定的时间)

需要导入time包,就可以在脚本中自由添加休眠时间了,这里的休眠指固定休眠

注意,当页面中的元素没有加载出来的时候,无法定位到元素

所以需要等待,如果不等待,就会出错


b.隐式等待(只要等待页面上的元素加载出来就立刻去执行下一条指令)

driver.implicitly_wait(10)

等10秒之后元素还没有加载出来,就会报错

(4)信息打印

a.打印title

b.打印URL

(5)对浏览器的操作

a.浏览器的最大化

b.设置浏览器的宽和高

c.浏览器的前进

d.浏览器的后退


e.浏览器滚动条的控制(必须由javascript控制)

把滚动条拉到最低端

js0 ="var q =document.documentElement.scrollTop=10000"
driver.execute_script(js0)

把滚动条拉到最顶端

js1 ="var q =document.documentElement.scrollTop=0"
driver.execute_script(js1)

6. 键盘事件(所有的键盘操作必须建立在定位带元素的基础上)

导入工具包

from selenium.webdriver.common.keys import keys

Keys.TAB

Keys.ENTER

组合键:

导入工具包

from selenium.webdriver.common.action_chains import ActionChains

全选: driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a') 

剪贴: driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')

右击和双击的前提是先定位元素

右击:ActionChains(driver).context_click(b).perform()

双击:(和点击的效果是一样的):ActionChains(driver).double_click(b).perform

上述全部代码如下:

from idlelib import browser

from selenium import webdriver
import time

from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import  Keys

driver = webdriver.Firefox()
driver.get("https://www.baidu.com/")
time.sleep(5)
#通过id来定位,全局唯一,可以唯一定位一个元素
#driver.find_element_by_id("kw").send_keys("迪丽热巴")
#time.sleep(3)
#driver.find_element_by_id("su").click()
#通过name来定位,name又能不全局唯一
#driver.find_element_by_name("wd").send_keys("赵盼儿")
#driver.find_element_by_id("su").click()
#tag_name定位
#driver.find_element_by_tag_name("input").send_keys("孙二娘")
#driver.find_element_by_tag_name("input").click()
#class name
#driver.find_element_by_class_name("s_ipt").send_keys("孙二娘")
#下面这个会失败,要用id定位
#driver.find_element_by_class_name("btn self-btn bg s_btn").click()
#link text
#driver.find_element_by_link_text("hao123").click()
#partial link text
#driver.find_element_by_partial_link_text("123").click()
#xpath  任何元素都可以定位
#driver.find_element_by_xpath("//*[@id='kw']").send_keys("赵盼儿")
#driver.find_element_by_xpath("//*[@id='su']").click()
#driver.find_element_by_css_selector("#kw").send_keys("双笙")
#driver.find_element_by_css_selector("#su").click()

#driver.maximize_window()
#获取文本信息,把内容赋给变量,获取元素上的内容
#text =driver.find_element_by_id("bottom_layer").text
#print(text)
#先搜索李易峰
#driver.find_element_by_css_selector("#kw").send_keys("李易峰")
#driver.find_element_by_css_selector("#su").submit()

#固定等待

#time.sleep(10)
#智能等待
#driver.implicitly_wait(10)
#driver.find_element_by_link_text("百度百科").click()
#driver.find_element_by_id("kw").clear()

#信息打印
#title=driver.title
#print(title)
#url=driver.current_url
#print(url)
#driver.quit()


#对浏览器操作,浏览器的最大化
#driver.find_element_by_id("kw").send_keys("王牌部队")
#driver.find_element_by_id("su").click()
#time.sleep(4)
#driver.set_window_size(400,1000)
#time.sleep(3)

#driver.maximize_window()
#time.sleep(8)
##浏览器的前讲和后退
#browser.forword()
#time.sleep(8)
#browser.back()
#ime.sleep(8)


#浏览器的滚动条的控制
#js0 ="var q =document.documentElement.scrollTop=10000"
#driver.execute_script(js0)
#time.sleep(3)
#js1 ="var q =document.documentElement.scrollTop=0"
#driver.execute_script(js1)
#time.sleep(8)
#driver.quit()


#driver.maximize_window()
#driver.find_element_by_id("kw").send_keys("元旦快乐")
#driver.find_element_by_id("su").click()
#b=driver.find_element_by_id("su")
#time.sleep(5)
#然后再用剪切的方式clear掉文本框中的输入内容
#driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
#time.sleep(3)
#driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
#time.sleep(3)

#双击
driver.maximize_window()
driver.find_element_by_id("kw").send_keys("元旦快乐")
driver.find_element_by_id("su").click()
b=driver.find_element_by_id("su")
#双击
#ActionChains(driver).double_click(b).perform
#右击
ActionChains(driver).context_click(b).perform()
time.sleep(5)

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