软件流程:需求分析-设计-编码-单元测试-集成测试-系统测试-验收测试

单元测试:对程序中的单个子程序或独立功能的代码进行测试的过程

集成测试:通过单元模块组装成系统或子系统,在进行测试,重点检查模块的接口是否正确

系统测试:对整个产品进行测试

验收测试:验证是否满足用户需求

-------------------------------------------------------------------------------------------------------------------

功能测试可以分为:逻辑功能测试、界面功能测试、易用性测试、安装测试、兼容性测试。。

性能测试:利用自动化工具模拟多种正常,峰值以及异常负载条件对系统的各项性能指标进行测试

自动化测试:以人为驱动的测试转化为机器的一种过程:功能自动化,性能自动化

-----------------------------------------------------------------------------------------------------------------

适合自动化的项目:

1.任务明确,需求变更不频繁

2.比较频繁的回归测试

3.软件开发周期时间长

4.脚本可以重复使用

----------------------------------------------------------------------------------------------------------------------

自动化测试工具:

QTP:提供强大的录制回放功能

Roboot Framework :python编写的自动化测试框架

selenium:用于web程序测试工具,支持多平台,多预览,多语言实现自动化

--------------------------------------------------------------------------------------------------------------------

selenium:开源。免费,支持多平台、多语言

selenium IDE:Firefox的一个插件,支持录制和回放功能

selenium Grid:可以再多台机器上和构建环境中进行多个测试事项:并发执行、通过一个主机统一控制用例在不同环境,不同机器下进行

selenium RC:支持不同语言编写自动化脚本

webdriver:是selenium RC的代替品,提供一系列方法对网站端进行操作

----------------------------------------------------------------------------------------------------------------------

python +webdriver API

1.最大化

driver.maximize_window()

2.最小化

driver.minimize_window()

3.设置浏览器尺寸

driver.set_window_size(100,200)

4.控制浏览器前进后退

driver.back()

driver.forward()

driver.refresh()--刷新

5.关闭

driver.qult()

--------------------------------------------------------------------------

定位单个元素:

id,name(优先使用)

driver.find_element_by_id()

driver.find_element_by_name()

tag name ,class name

driver.find_element_by_class_name()

当class属性bg s_ge,中间有空格即为符合型,直选一个属性值就可以了如“s_ge”

tag标签

driver.find_element_by_tag_name("div")   #适用于层级定位,不靠谱,同一界面容易出现相同的tag name

link text与partial link text

b.find_element_by_partial_link_text("首页").click()  #模糊匹配

-------------------------------------------------------------------------------------------------------------------

xpath定位

xpath是一种在XML文档中定位元素的语言

 1.绝对路径:driver.find_element_by_xpath("/html/body/div[2]/form/span/input").click()

1.相对路径:b.find_element_by_xpath("//*[@id="u1"]/a[5]").click()

//表示显示要查找的所有元素

 

css定位

driver.findElement(by.cssSelector( " input[value=’1’] " )).click(); 属性 value 值为 1 ,类型为 input

操作测试对象

clear()----清空元素

send_keys()----输入文字

click()  ----点击

submit()---提交表单

---------------------------------------------------------------------------

size:返回元素尺寸

>>> t =b.find_element_by_id("kw").size
>>> print(t)
{'height': 22, 'width': 500}

text:获取元素文本

>>> t =b.find_element_by_id("su").text
>>> print(t)

attribute---获取元素属性值

>>> t =b.find_element_by_id("su").get_attribute("typy")
>>> print(t)

is_displayed()

>>> t =b.find_element_by_id("su").is_displayed()
>>> print(t)
True

鼠标事件

ActionChains 类鼠标操作常用方法

context_click()   右击

double_click()   双击

drag_and_drop()   移动

move_to_element()   鼠标悬停到一个元素上

click_and_hold()  按下鼠表左键在一个元素上

#先导入ActionChains包
from selenium.webdriver.common.action_chains import ActionChains
#元素定位
context=b.find_element_by_link_text("地图") 
#右键点击
ActionChains(b).context_click(context).perform()
------------------------------------------------------
#双击
ActionChains(b).double_click(context).perform()
-------------------------------------------------------
#移动
above=b.find_element_by_link_text("xxx") #目标路径
 ActionChains(b).drag_and_drop(context,abrove).perform()
-----------------------------------------------------------
#鼠标悬停
ActionChains(b).move_to_element(context).perform()
----------------------------------------------------------------
#鼠标左键
ActionChains(b).click_and_hold(abrove).perform()

键盘信息

from selenium import webdriver
#导入模块
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Chrome()

driver.get("http://www.baidu.com")
#输入字符串
driver.find_element_by_id("kw").send_keys("selenium")
time.sleep(3)
#删除多输入的一个m
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
#输入空格
driver.find_element_by_id("kw").send_keys(Keys.SPACE)
#CTROL+A全选
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"a")
----------------------------------------------------------------------
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"x")
------------------------------------------------------------------------
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"v")
------------------------------------------------------------------------
#回车
driver.find_element_by_id("kw").send_keys(Keys.ENTER)

打印结果输出

>>> print(driver.title)
百度一下,你就知道
>>> print(driver.current_url)
https://www.baidu.com/

--------------------------------------------------------------------------------------------------

时间等待

1.导入time---------sleep()设置固定时间

2.implicity_wait():这是webdriver提供的一个超时等待,如果超出设置时间就会抛出异常

3.WebDriverWait():在设置时间内,默认每隔一段时间检测一次,如果超时报错

#格式
from selenium.webdriver.support.ui import WebDriverWait

WebDriverWait(self, driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None):

driver:Webdirver的驱动程序
timeout:最长超时时间
poll_frequency:休眠时间间隔
------------------------------------------------
b = WebDriverWait(driver,30).until(x:x.find_element_by_id())

WebDriverWait一般有until与until_not()方法配合使用
until(method,message="")
驱动一个参数,查看返回值为True
until_not(method,message="")
驱动一个参数,查看返回值为Flase

定位一组元素

find_elements

#查询所以标签是input的元素
b = find_elements_by_tag_name("input")
for s in b:
    if s.get_attribute("type") == "check":
            s.click()

层级定位

当页面有很多基本属性相同时,先定位父级再定位子集

b = find_element_by_id("kw").find_element_by_link_text("kw").click()

定位frame中对象

在 web 应用中经常会出现 frame 嵌套的应用,假设页面上有 A、B 两个 frame,其中 B 在 A 内,那么
定位 B 中的内容则需要先到 A,然后再到 B。
switch_to_frame 方法可以把当前定位的主体切换了 frame 里。怎么理解这句话呢?我们可以从 frame
的实质去理解。frame 中实际上是嵌入了另一个页面,而 webdriver 每次只能在一个页面识别,因此才需要
用 switch_to.frame 方法去获取 frame 中嵌入的页面,对那个页面里的元素进行定位。

#coding=utf-8
from selenium import webdriver
import time
import os
driver = webdriver.Firefox()
file_path = 'file:///' + os.path.abspath('frame.html')
driver.get(file_path)
driver.implicitly_wait(30)
#先找到到 ifrome1(id = f1)
driver.switch_to_frame("f1")
#再找到其下面的 ifrome2(id =f2
driver.switch_to_frame("f2")
#下面就可以正常的操作元素了
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
time.sleep(3)
driver.quit()

Alter弹窗处理;

switch_to_alter()切到alter

accept()确认

dismiss()取消

send_keys()有输入框时才能使用

浏览器多窗口处理

要想在多个窗口之间切换,首先要获得每一个窗口的唯一标识符号(句柄)。通过获得的句柄来区别
分不同的窗口,从而对不同窗口上的元素进行操作

 

from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get("http://www.baidu.com/")
#获得当前窗口
nowhandle=driver.current_window_handle
#打开注册新窗口
driver.find_element_by_name("tj_reg").click()
#获得所有窗口
allhandles=driver.window_handles
#循环判断窗口是否为当前窗口
for handle in allhandles:
if handle != nowhandle:
driver.switch_to_window(handle)
print 'now register window!'
#切换到邮箱注册标签
driver.find_element_by_id("mailRegTab").click()
time.sleep(5)
driver.close()
#回到原先的窗口
driver.switch_to_window(nowhandle)
driver.find_element_by_id("kw").send_keys(u"注册成功!")
time.sleep(3)
driver.quit()

 

在本例中所有用到的新方法:
current_window_handle
获得当前窗口句柄
返回的所有窗口的句柄到当前会话
switch_to_window()
用于处理多窗口操作的方法,与我们前面学过的 switch_to_frame() 是类似,switch_to_window()用于
处理多窗口之前切换,switch_to_frame() 用于处理多框架的切换。
close()
如果你足够细心会发现我们在关闭“注册页”时用的是 close()方法,而非 quit();close()用于关闭当前
窗口,quit()用于退出驱动程序并关闭所有相关窗口。

下拉框要想定

位下拉框中的内容,首先需要定位到下拉框;这样的二次定位

上传文件

文件上传操作也比较常见功能之一,上传功能操作 webdriver 并没有提供对应的方法,关键上传文
件的思路。
上传过程一般要打开一个系统的 window 窗口,从窗口选择本地文件添加。所以,一般会卡在如何操
作本地 window 窗口。其实,上传本地文件没我们想的那么复杂;只要定位上传按钮,通 send_keys 添加
本地文件路径就可以了。绝对路径和相对路径都可以,关键是上传的文件存在。下面通地例子演示操作过

滚动条

用于标识滚动条位置的代码

<body onload= "document.body.scrollTop=0 ">
<body onload= "document.body.scrollTop=100000 ">

-------------------------------------------------------------

#coding=utf-8
from selenium import webdriver
import time
#访问百度
driver=webdriver.Firefox()
driver.get("http://www.baidu.com")

#搜索
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
time.sleep(3)
#将页面滚动条拖到底部 js
="var q=document.documentElement.scrollTop=10000" driver.execute_script(js) time.sleep(3) #将滚动条移动到页面的顶部 js_="var q=document.documentElement.scrollTop=0" driver.execute_script(js_) time.sleep(3) driver.quit()

cookie 

有时候我们需要验证浏览器中是否存在某个 cookie,因为基于真实的 cookie 的测试是无法通过白盒
和集成测试完成的。webdriver 可以读取、添加和删除 cookie 信息。
webdriver 操作 cookie 的方法有:
 get_cookies() 获得所有 cookie 信息
 get_cookie(name) 返回特定 name 有 cookie 信息
 add_cookie(cookie_dict) 添加 cookie,必须有 name 和 value 值
 delete_cookie(name) 删除特定(部分)的 cookie 信息

#coding=utf-8
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get("http://www.youdao.com")
#向 cookie 的 name 和 value 添加会话信息。
driver.add_cookie({'name':'key-aaaaaaa', 'value':'value-bbbb'})
#遍历 cookies 中的 name 和 value 信息打印,当然还有上面添加的信息
for cookie in driver.get_cookies():
print "%s -> %s" % (cookie['name'], cookie['value'])
##### 下面可以通过两种方式删除 cookie #####
# 删除一个特定的 cookie
driver.delete_cookie("CookieName")
# 删除所有 cookie
driver.delete_all_cookies()
time.sleep(2)
driver.close()

 

posted on 2019-08-03 15:58  wzc27229  阅读(192)  评论(0编辑  收藏  举报