赞
踩
Selenium是ThoughtWorks公司一个强大的开源Web功能测试工具系列,支持多平台、多浏览器、多语言去实现 自动化测试
webdriver的工作原理:
启动浏览器后,selenium-webdriver会将目标浏览器绑定到特定的端口,启动后的浏览器则作为webdriver 的remote server。
客户端(也就是测试脚本),借助ComandExecutor发送HTTP请求给sever端(通信协议:The WebDriver Wire Protocol,在HTTP request的body中,会以WebDriver Wire协议规定的JSON格式的字符串来告诉Selenium 我们希望浏览器接下来做什么事情)。
Sever端需要依赖原生的浏览器组件,转化Web Service的命令为浏览器native的调用来完成操作。
1.基本配置:安装火狐浏览器,工具–选项–高级–停止更新,版本为54位的(56 装3.6的IDE)
2.安装IDE附件:工具–附加组件–扩展—搜索selenium IDE,Firebug, FireBug,安装插件
1.进入火狐浏览器–工具–selenium IDE,进入自动化测试脚本录制界面(有小红点显示默认录制开始)
2.在浏览器中操作,操作完成,回到录制界面,停止录制
3.运行全部case/运行当前case
导出录制脚本:
文件–Export Test Case As–选择语言
录制代码表达式:
open:打开一个网站
type:根据html中的标签和属性,值定位操作
click:点击操作
录制脚本生成的代码冗余代码多,后期建议手写代码;
一个简单的python脚本
#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") //通过find_element_by_id方法定位在浏览器的位置
time.sleep(3)
browser.find_element_by_id("su").click() //定位位置并点击
browser.quit()//browser.close()表示关闭当前窗口。
//quit表示退出并关闭窗口的每一个相关的驱动程序。
对象的定位应该是自动化测试的核心,要想操作一个对象,首先应该识别这个对象,webdriver 提供了一系列的对象定位方法,不论使用任何方式,属性值一定得是唯一的才能定位成功,常用的有以下八种
find_element_by_id("xx").send_keys("xx")
browser.find_element_by_name("wd").send_keys("selenium")
browser.find_element_by_class_name("s_ipt").send_keys("selenium")
browser.find_element_by_link_text("hao123").click()
browser.find_element_by_partial_link_text("hao").click()
browser.find_element_by_tag_name("input").send_keys("selenium")
//若有多个相同的标签名则不成功,browser.find_element_by_xpath("//*[@id='kw']").send_keys("selenium")
browser.find_element_by_css_selector("#kw").send_keys("selenium")
在谷歌浏览器 中,可在调试台中,定位到指定位置–右键–copy–copy selector(css)/copy xpath(xpath)
在python中,不能双引号叠加
webdriver 中比较常用的操作对象的方法有下面几个:
browser.find_element_by_id("su").click()
driver.find_element_by_id("kw").send_keys("test")
driver.find_element_by_id("kw").clear()
driver.find_element_by_id("su").submit()
data=driver.find_element_by_id("cp").text print data #打印信息
import time time.sleep(3)
browser.implicitly_wait(30)
print driver.title
print driver.current_url #打印url
browser.maximize_window()
browser.set_window_size(480, 800)
browser.back()
browser.forward()
js="var q=document.documentElement.scrollTop=10000"
driver.execute_script(js)
js="var q=document.documentElement.scrollTop=0"
driver.execute_script(js)
要想调用键盘按键操作需要引入keys 包:
from selenium.webdriver.common.keys import Keys
通过send_keys()调用按键:
清除信息:
#tab 的定位相当于清除了密码框的默认提示信息,等同于clear() driver.find_element_by_id("account").send_keys(Keys.TAB)
tab 的定位相当于清除了密码框的默认提示信息,等同上面的clear()
driver.find_element_by_id("account").send_keys(Keys.TAB)
提交信息:可定位登陆按钮,通过enter(回车)代替click() :
driver.find_element_by_id("login").send_keys(Keys.ENTER)
ctrl+a 全选输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
ctrl+x 剪切输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
使用鼠标事件,需引进相应的模块
from selenium.webdriver.common.action_chains import ActionChains
生成用户的行为:ActionChains(driver)
所有的行动都存储在actionchains 对象。通过perform()存储的行为。
右击操作: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()
移动鼠标到一个元素中:move_to_element(menu)
定位一组对象,使用findElements 方法
在html页面中勾选复选框操作:
1.获取html源文件file_path = 'file:///' + os.path.abspath('checkbox.html') dr.get(file_path)
2.定位到input标签:inputs = dr.find_elements_by_tag_name('input')
3.for循环获取所有复选框内容:
for input in inputs:
if input.get_attribute('type') == 'checkbox':
input.click()
有时候我们定位一个元素,定位器没有问题,但一直定位不了,这时候就要检查这个元素是否在一个frame 中, seelnium webdriver 提供了一个switch_to_frame 方法,可以很轻松的来解决这个问题
对于两层嵌套的frame框架:
先找到到ifrome1(id = f1) browser.switch_to_frame("f1")
再找到其下面的ifrome2(id =f2) browser.switch_to_frame("f2")
下面就可以正常的操作元素了
先点击显示出1个下拉菜单,然后再定位到该下拉菜单所在的ul,再定位这个ul 下的某个具体的link。 在这里,我们定位第1个下拉菜单中的Action 这个选项
#coding=utf-8 from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait import time import os dr = webdriver.Chrome() file_path = 'file:///' + os.path.abspath('level_locate.html') dr.get(file_path) dr.find_element_by_link_text('Link1').click() #点击Link1链接(弹出下拉列表) WebDriverWait(dr,10).until(lambda the_driver: the_driver.find_element_by_id('dropdown1').is_displayed()) #找到id 为dropdown1的父元素 menu = dr.find_element_by_id('dropdown1').find_element_by_link_text('Action') #在父亲元件下找到link 为Action 的子元素 webdriver.ActionChains(dr).move_to_element(menu).perform() #鼠标定位到子元素上 time.sleep(2) dr.quit()
#coding=utf-8
from selenium
import webdriver
import os,time
driver= webdriver.Chrome()
file_path = 'file:///' + os.path.abspath('drop_down.html')
driver.get(file_path) time.sleep(2)
#先定位到下拉框
m=driver.find_element_by_id("ShippingMethod")
#再点击下拉框下的选项
m.find_element_by_xpath("//option[@value='10.69']").click()
time.sleep(3)
driver.quit()
text
返回alert/confirm/prompt 中的文字信息
accept
点击确认按钮
dismiss
点击取消按钮,如果有的话
send_keys
输入值,这个alert\confirm 没有对话框就不能用了,不然会报错
1.接收alert
# -*- coding: utf-8 -*- from selenium import webdriver from time import sleep import os dr = webdriver.Chrome() file_path = 'file:///' + os.path.abspath('alert.html') dr.get(file_path) # 点击链接弹出alert dr.find_element_by_id('tooltip').click() sleep(2) alert = dr.switch_to_alert() alert.accept() sleep(2) #打印弹框信息 alert = dr.switch_to_alert() print alert.text #取消对话框(如果有的话) alert = dr.switch_to_alert() alert.dismiss() #输入值 alert = dr.switch_to_alert() alert.send_keys("hello word") dr.quit()
# -*- coding: utf-8 -*- from selenium import webdriver from time import sleep import os import selenium.webdriver.support.ui as ui dr = webdriver.Chrome() file_path = 'file:///' + os.path.abspath('modal.html') dr.get(file_path) # 打开对话框 dr.find_element_by_id('show_modal').click() sleep(3) # 点击对话框中的链接 link = dr.find_element_by_id('myModal').find_element_by_id('click') link.click() #dr.execute_script('$(arguments[0]).click()', link) sleep(4) # 关闭对话框 buttons =dr.find_element_by_class_name('modal-footer').find_elements_by_tag_name('button') buttons[0].click() sleep(2) dr.quit()
上传过程一般要打开一个本地窗口,从窗口选择本地文件添加。所以,一般会卡在如何操作本地窗口添加上传文 件。
#coding=utf-8
from selenium
import webdriver
import os,time
driver = webdriver.Chrome()
#脚本要与upload_file.html 同一目录
file_path = 'file:///' + os.path.abspath('upload.html')
driver.get(file_path)
#定位上传按钮,添加本地文件
driver.find_element_by_name("file").send_keys('D:\\PycharmProjects\\test\\upload.txt')
time.sleep(2)
driver.quit()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。