目录
selenium相关介绍:
selenium工具集:selenium 1.0 、selenium 2.0
selenium 1.0包括:selenium IDE(自动化脚本录制工具)、selenium Grid(分布式测试)、selenium RC(selenium Sever、Client Libraries)
selenium 2.0在selenium 1.0的基础上加了一个webdriver
(绕过了JavaScript的环境沙箱问题);
selenium工具:自动化测试工具、UI测试工具
selenium的特点:
轻量级,免费开源;
支持多语言,Java Python C#ruby JavaScript
支持多浏览器:Chrome Firefox edge Opera Safari lE
支持分布式: selenium Grid
WebDriver
的原理:
WebDriver
就相当于司机,乘客就相当于脚本,司机会驱动汽车到达乘客想要去的地方,即WebDriver
会驱动浏览器运行脚本。
一、简单脚本的构成
# coding = utf-8
from selenium import webdriver
import time
browser = webdriver.Firefox()
time.sleep(3)
browser.get("http://www.baidu.com")
time.sleep(3)
browser.find_element_by_id("kw").send_keys("selenium")
time.sleep(3)
browser.find_element_by_id("su").click()
browser.quit()
- 在脚本头部导入需要的包;
- 获取浏览器的驱动;
- 使用浏览器对需要测试的web系统进行操作;
- 测试完了,关闭浏览器。
二、元素的定位
对象的定位应该是自动化测试的核心,要想操作一个对象,首先应该识别这个对象。一个对象就是一个人一样,他会有各种的特征(属性),如比我们可以通过一个人的身份证号,姓名,或者他住在哪个街道、楼层、门牌找到这个人。
那么一个对象也有类似的属性,我们可以通过这个属性找到这对象。
#退出并关闭窗口的每一个相关的驱动程序。
browser.quit()
#关闭当前窗口
browser.close()
id定位
定位页面元素的原则:元素的属性全局(全页面)唯一;
id全局唯一
以百度搜索框为例:
from selenium import webdriver
import time
driver = webdriver.Chrome()
url = "https://www.baidu.com/"
driver.get(url)
#用id来定位百度搜索框
driver.find_element_by_id("kw").send_keys("迪丽热巴")
driver.find_element_by_id("su").click()
time.sleep(3)
driver.quit()
name定位
以禅道登录页面为例:
name在此处全局唯一,所以可以定位到。
往往不用元素的class_name经常重叠,以后用name定位及class_name定位,应保证其全局唯一。
from selenium import webdriver
import time
driver = webdriver.Chrome()
url = "http://127.0.0.1:88/zentao/user-login-L3plbnRhby8=.html"
driver.get(url)
#用name来定位
driver.find_element_by_name("account").send_keys("admin")
driver.find_element_by_name("password").send_keys("Rui1234567")
time.sleep(6)
driver.find_element_by_id("submit").click()
time.sleep(6)
driver.quit()
link text定位
有时候不是一个输入框也不是一个按钮,而是一个文字链接,我们可以通过link
。
例:定位百度新闻:
from selenium import webdriver
import time
driver = webdriver.Chrome()
url = "https://www.baidu.com/"
driver.get(url)
driver.find_element_by_link_text("新闻").click()
time.sleep(3)
driver.quit()
如果该页面有两个新闻链接,则不能按照上述操作。
Partial link text 定位
通过部分链接定位,这个有时候也会用到。拿上面的例子,我可以只用链接的一部分文字进行匹配。
例:定位hao123
:
from selenium import webdriver
import time
driver = webdriver.Chrome()
url = "https://www.baidu.com/"
driver.get(url)
driver.find_element_by_partial_link("123").click()
time.sleep(3)
driver.quit()
同样,如果内容在页面上有重复的,就无法应用 Partial link text 定位。
tag name 定位
从上面的百度输入框的属性信息中,我们看到,不单单只有id 和name 两个属性, 比如class 和tag name(标签名)input 就是一个标签的名字,可以通过find_element_by_tag_name(“input”) 函数来定位。
下面的程序执行失败,要用tag name 来定位,必须保证tag name 全局唯一。
from selenium import webdriver
import time
driver = webdriver.Chrome()
url = "https://www.baidu.com/"
driver.get(url)
driver.find_element_by_tagname("input").send_keys("迪丽热巴")
driver.find_element_by_tagname("input").click<