一、自动化
自动化测试概念:自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。
自动化测试包括UI自动化,接口自动化,单元测试自动化。
二、Selenium
1.概念:
Selenium是web应用中基于UI的自动化测试框架,支持多平台、多浏览器、多语言。
早期的selenium RC已经被现在的webDriver所替代,可以简单的理解为selenium1.0+webdriver构成
现在的Selenium2.0。现在我们说起selenium,一般指的是Selenium2.0。它有由Selenium IDE,
Webdriver,Selenium Grid组成。
Selenium IDE:
Selenium IDE一个用于Selenium测试的完成集成开发环境,可以直接录制在浏览器的用户操作,并且
能回放,编辑和调试测试脚本。调试过程中可以逐步进行或调整执行的速度,并且可以在底部浏览日志
出错信息。
录制的测试脚本可以以多种语言导出,比如java,C#,Python,Ruby等,方便掌握不同语言的测试人
员操作。
Webdriver:
Selenium RC 在浏览器中运行 JavaScript 应用,会存在环境沙箱问题,而WebDriver可以跳出
JavaScript的沙箱,针对不同的浏览器创建更健壮的,分布式的,跨平台的自动化测试脚本。基于特定
语言(Java,C#,Python,Ruby,Perl,JavaScript等)绑定来驱动浏览器对Web元素进行操作和验
证。
2.工作原理
3.Selenium + Java环境搭建
搭建步骤
1.下载Chrome驱动与Chrome浏览器(版本注意适配)
2.创建java项目(Maven项目)
3.引入Selenium项目依赖
4.编写自动化代码
注:此处不说明搭建流程,csdn上有很多这里只演示成功结果
当环境搭建好以后写如下代码
public class Main {
public static void main(String[] args) {
//创建一个options对象,用来给请求设置一些参数
ChromeOptions options = new ChromeOptions();
//允许所有的请求
options.addArguments("--remote-allow-origins=*");
//创建一个驱动对象
WebDriver webDriver = new ChromeDriver(options);
//让驱动对象打开百度网页
webDriver.get("https://www.baidu.com");
//关闭打开的网页
webDriver.quit();
}
}
当代码成功运行且弹出以下窗口并关闭就算成功,当然注释掉最后一行代码页面就不会被关闭
三、webdriver API
元素定位
对象的定位应该是自动化测试的核心,要想操作一个对象,首先应该识别这个对象。一个对象就是一个人一样,他会有各种的特征(属性),如比我们可以通过一个人的身份证号,姓名,或者他住在哪个街道、楼层、门牌找到这个人。
那么一个对象也有类似的属性,我们可以通过这些属性找到这对象。
注意:不管用那种方式,必须保证页面上该属性的唯一性
webdriver 提供了一系列的对象定位方法,常用的有以下几种
- id
- name
- class name
- link text
- partial link text
- tag name
- xpath
- css selector
我们可以看到,一个百度的输入框,可以用这么多种方式去定位。(以下属于网络代码,仅供参考说明,我没有测试过)
<input id="kw" class="s_ipt" type="text" maxlength="100" name="wd"
autocomplete="off">
#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")
############################################
browser.find_element_by_id("su").click()
time.sleep(3)
browser.quit()
1.css定位元素
1)id选择器
#kw就是一个id选择器
#kw是百度网页搜索框id,通过这个id选择器我们就可以定位到搜索框
同理#su就是"百度一下"按钮的id
2)类选择器
.(类名)就构成一个类选择器如.s_ipt就是一个类选择器,s_ipt就是类名
3)标签选择器
形如div,span,a,这样的就是标签选择器,在html中他们代表一个标签,我们可以直接通过标签选择器定位到该元素
4)后代选择器
将父标签和子标签以空格的形式分隔开,共同构成后代选择器
形如(div span p)这样就是一个后代选择器,这种选择方式可以向后叠加,直到定位到自己写要的元素
2.XPath定位
什么是XPath:http://www.w3.org/TR/xpath/
XPath 基础教程:http://www.w3schools.com/xpath/default.asp
XPath 是一种在XML 文档中定位元素的语言。因为HTML 可以看做XML 的一种实现,所以selenium 用户可是使用这种强大语言在web 应用中定位元素。
XPath 扩展了上面id 和name 定位方式,提供了很多种可能性。
XPATH的获取可以用chrome的F12开发者模式中Element-右键-copy-copy xpath来获取
注:css定位元素也可右键