Webdriver(Selenium2)是一种用于Web应用程序的自动测试工具,它提供了一套友好的
API,与Selenium 1(Selenium-RC)相比,Webdriver的API更容易理解和使用,其可读性
和可维护性也大大提高。Webdriver完全是一套类库,不依赖于任何测试框架,除了
必要的浏览器驱动,不需要启动其他进程或安装其他程序,也不必像Selenium 1那样需要
先启动服务。
Firefox
IE
Opera
Chrome
safari
java
c#
php
python
perl
ruby
安装:pip install selenium==XXXX
卸载:pip uninstall selenium
查看版本号:
pip show selenium
启动Firefox
FireFox 48以上版本
selenim 3.X + FireFox驱动--geckodriver
FireFox 48以下版本
selenium2.X 内置驱动
启动IE浏览器
IE9以上版本
selenium3.X + IE驱动
IE9以下版本
selenium2.X + 驱动
启动Chrome浏览器
selenium2.x/3.x + Chrome驱动
各个驱动下载地址:http://www.seleniumhq.org/download/
浏览器位数的版本和驱动版本要一致!如果是32bit浏览器而Driver是64bit则会导致脚本运行失败!
案例:
from selenium import webdriver
from time import sleep
#加载浏览器驱动
driver=webdriver.Firefox()
#打开自学网页面
driver.get("http://www.51zxw.net")
print(driver.title)
sleep(3)
#打开百度
driver.get("http://www.baidu.com")
print(driver.title)
sleep(2)
#关闭firefox浏览器
driver.quit()
将浏览器驱动放到python安装目录
启动chrome浏览器
from selenium import webdriver
from time import sleep
#加载浏览器驱动
# driver=webdriver.Firefox()
driver=webdriver.Chrome()
#打开自学网页面
driver.get("http://www.51zxw.net")
print(driver.title)
sleep(3)
#打开百度
driver.get("http://www.baidu.com")
print(driver.title)
sleep(2)
#关闭firefox浏览器
driver.quit()
chromedriver与chrome各版本及下载地址
http://chromedriver.storage.googleapis.com/index.html
http://npm.taobao.org/mirrors/chromedriver/
浏览器操作
浏览器窗口大小设置
页面前进后退
页面刷新
from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.get('http://www.51zxw.net')
driver.maximize_window()
sleep(2)
driver.get('http://www.51zxw.net/list.aspx?cid=615')
driver.set_window_size(400,800)
driver.refresh()
sleep(2)
driver.back()
sleep(2)
driver.forward()
sleep(2)
driver.quit()
元素定位
元素的定位是自动化测试的核心,要想操作一个元素,首先应该识别这个元素,
webdriver提供了一系列的元素定位方法,常用的有以下几种
id
name
class name
link text
partial link text
tag name
xpath
from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.get('http://www.baidu.com')
# driver.find_element_by_id('kw').send_keys('Selenium 我要自学网')
driver.find_element_by_name('wd').send_keys('selenium 我要自学网')
sleep(5)
driver.find_element_by_id('su').click()
driver.quit()
from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.get('http://www.51zxw.com')
#定位标签名为input的元素
# driver.find_element_by_tag_name("input").send_keys("selenium")
#获取页面所有标签名称为"input"的标签
driver.find_elements_by_tag_name("input")[1].send_keys("selenium")
sleep(3)
driver.quit()
根据标签中属性class来定位的一种方法
from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.get("http://baidu.com")
driver.find_element_by_class_name("s_ipt").send_keys("selenium")
sleep(2)
driver.find_element_by_id("su").click()
driver.quit()
link_text定位就是根据链接文字进行定位。
from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.get('http://www.51zxw.net/')
driver.maximize_window()
driver.find_element_by_link_text('程序开发').click()
sleep(3)
driver.find_element_by_link_text('1-3 揭开自动化测试神秘面纱').click()
sleep(3)
driver.quit()
xpath即为XML路径语言,它是一种用来确定XML文档中某部分位置的语言。Xpath基于XML的树状结构,
提供在数据结构树中拭寻节点的能力。
xpath绝对与相对定位
from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.get('http://www.baidu.com')
#绝对路径定位
# driver.find_element_by_xpath("/html/body/div[1]/div[1]/div/div[1]/div/form/span[1]/input").send_keys('selenium')
#使用元素熟悉定位--定位到input标签中为kw的元素
# driver.find_element_by_xpath("//input[@id='kw']").send_keys("selenium")
#定位input标签中name属性为wd的元素
# driver.find_element_by_xpath("//input[@name='wd']").send_keys("selenium")
#定位input所有标签元素中,class属性为s_ipt的元素
driver.find_element_by_xpath("//input[@class='s_ipt']").send_keys("selenium")
sleep(3)
driver.find_element_by_id('su').click()
driver.quit()
from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.get("http://www.51zxw.net/")
# 层级和属性组合定位--自学网首页输入用户名管密码
# driver.find_element_by_xpath("//form[@id='loginForm']/ul/input[1]").send_keys("test")
# sleep(3)
#逻辑运算组合定位
driver.find_element_by_xpath("//input[@class='loinp' and @name='username']").send_keys("hello")
sleep(3)
driver.find_element_by_xpath("//form[@id='loginForm']/ul/input[2]").send_keys(123456)
sleep(3)
driver.quit()
from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.get("http://www.baidu.com")
# 通过#id选择器根据id属性来位元素
# driver.find_element_by_css_selector("#kw").send_keys('selenium')
#.class class选择器,根据class属性值来定位元素
# driver.find_element_by_css_selector(".s_ipt").send_keys("python")
#[attribute='value]根据属性来定位元素
# driver.find_element_by_css_selector("[autocomplete='off']").send_keys("hello")
#根据层级来定位父元素>子元素
driver.get("http://www.51zxw.com")
driver.find_element_by_css_selector("form#loginForm>ul>input").send_keys("hello333")
driver.find_element_by_css_selector("form#loginForm>ul>input[type='password']").send_keys("hello333")
sleep(2)
driver.quit()
from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.get("http://www.51zxw.net/")
sleep(2)
#根据option标签来定位
# driver.find_elements_by_tag_name('option')[1].click()
#根据css选择器属性值来定位
driver.find_element_by_css_selector("[value='2']").click()
sleep(2)
driver.quit()
from selenium import webdriver
from time import sleep
from selenium.webdriver.support.ui import Select
driver=webdriver.Firefox()
driver.get("http://www.51zxw.net/")
sleep(2)
#利用Select类来进行定位
select = Select(driver.find_element_by_css_selector("[name='CookieDate']"))
select.select_by_index(1)
sleep(2)
select.select_by_visible_text("留一月")
sleep(2)
select.select_by_value("3")
sleep(2)
driver.quit()
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
driver=webdriver.Firefox()
driver.get("http://www.baidu.com")
driver.maximize_window()
driver.find_element_by_css_selector("#kw").send_keys("python")
sleep(3)
element=driver.find_element_by_css_selector("#kw")
#双击操作
ActionChains(driver).double_click(element).perform()
sleep(2)
#右击操作
ActionChains(driver).context_click(element).perform()
sleep(2)
#鼠标悬停
above=driver.find_element_by_css_selector(".pf")
ActionChains(driver).move_to_element(above).perform()
sleep(4)
driver.quit()
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.keys import Keys
driver=webdriver.Firefox()
driver.get("http://www.baidu.com")
driver.find_element_by_css_selector("#kw").send_keys("python")
sleep(2)
#全选
driver.find_element_by_css_selector("#kw").send_keys(Keys.CONTROL,'a')
#复制或剪切
# driver.find_element_by_css_selector("#kw").send_keys(Keys.CONTROL,'c')
driver.find_element_by_css_selector("#kw").send_keys(Keys.CONTROL,'x')
driver.get("http://www.sogou.com")
sleep(2)
#粘贴关键词
driver.find_element_by_css_selector(".sec-input").send_keys(Keys.CONTROL,'v')
sleep(2)
driver.find_element_by_css_selector("#stb").click()
sleep(4)
driver.quit()
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.common.exceptions import NoSuchElementException
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from time import sleep
driver=webdriver.Firefox()
driver.get("http://www.baidu.com/")
sleep(2)
driver.find_element_by_css_selector("#kw").send_keys("selenium")
element=WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,'su')))
element.click()
sleep(3)
driver.quit()
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from time import sleep,ctime
drive=webdriver.Firefox()
drive.get("http://www.baidu.com")
sleep(2)
#隐式等待时间设定5秒
drive.implicitly_wait(5)
#检测搜索框是否存在
try:
print(ctime())
drive.find_element_by_css_selector("#kw").send_keys("python")
drive.find_element_by_css_selector("#su").click()
except NoSuchElementException as msg:
print(msg)
finally:
print(ctime())
sleep(3)
drive.quit()
Frame_test
from selenium import webdriver
from time import sleep
drive=webdriver.Firefox()
#设置网页文件路径,r代表路径转义
file_path=r"D:\C\Selenium自动化测试\ch4\4-22-4-32script\Frame.html"
#路径转义另一种写法
#file_path='D:\\C\\Selenium自动化测试\\ch4\\4-22-4-32script\\Frame.html'
drive.get(file_path)
#切换到frame页面内
drive.switch_to.frame("search")
#定位到搜索框按钮输入关键词
drive.find_element_by_css_selector("#query").send_keys("python")
sleep(2)
drive.find_element_by_css_selector("#stb").click()
sleep(2)
drive.quit()
from selenium import webdriver
from time import sleep
drive=webdriver.Firefox()
#打开selenium课程页面
drive.get("http://www.51zxw.net/list.aspx?cid=615")
#获取课程页面的窗口句柄
selenium_index=drive.current_window_handle
sleep(2)
#点击2-1课程链接,进入课程详情页面
drive.find_element_by_partial_link_text('2-1').click()
sleep(4)
#跳转到课程主页面窗口,点击3-1课程
drive.switch_to.window(selenium_index)
sleep(3)
drive.find_element_by_partial_link_text('3-1').click()
sleep(3)
drive.quit()
from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.get("http://www.baidu.com")
driver.find_element_by_link_text("设置").click()
sleep(3)
driver.find_element_by_link_text("搜索设置").click()
sleep(3)
#driver.find_element_by_link_text("保存设置").click()
driver.find_element_by_link_text("恢复默认").click()
sleep(3)
#处理警告窗口
alert=driver.switch_to_alert()
alert.accept()
sleep(2)
driver.quit()
from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.get("http://www.baidu.com")
driver.find_element_by_css_selector(".soutu-btn").click()
sleep(3)
driver.find_element_by_css_selector(".upload-pic").send_keys(r"D:\139-130\1c6748dba0ab1d21542b85118454319b.jpg")
sleep(10)
driver.quit()
from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.get("http://www.51zxw.net")
sleep(2)
#将滚动条拖到最底部
js="var action=document.documentElement.scrollTop=10000"
driver.execute_script(js)
sleep(2)
#将滚动条拖动到最顶部
js="var action=document.documentElement.scrollTop=0"
driver.execute_script(js)
sleep(2)
driver.quit()
from selenium import webdriver
from time import sleep
#加载浏览器驱动
driver=webdriver.Firefox()
#打开自学网页面并截图
driver.get("http://www.51zxw.net")
driver.get_screenshot_as_file(r"D:\python\selenium自动化测试\ch4\51zxw.jpg")
#打开百度页面并截图
driver.get("http://www.baidu.com")
driver.get_screenshot_as_file(r"D:\python\selenium自动化测试\ch4\baidu.png")
sleep(2)
driver.quit()
from selenium import webdriver
driver=webdriver.Firefox()
driver.get("http://www.51zxw.net/")
#获取cookie全部内容
cookie=driver.get_cookies()
#打印全部cookie信息
print(cookie)
#打印cookie第一组信息
print(cookie[0])
#添加cookie
driver.add_cookie({'name':'51zxw','value':'www.51zxw.net'})
for cookie in driver.get_cookies():
print("%s----%s" %(cookie['name'],cookie['value']))
driver.quit()
4.记录cookie
通过向浏览器中添加cookie可以绕过登录的验证码。
from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.get("http://www.baidu.com")
driver.add_cookie({'name':'BAIDUUID','value':'6B1D65DFFRREEF403D26FGGRFFGFDF1477E:FG=1'})
driver.add_cookie({'name':'BDUSS','value':'zJJci1oTXUxR1U13aF111GRTcmdHbmRHT2lUM1A0aXpKcVB6elA3fkxCbnhhQVFBQUFBJCQAAAAAAAAAAAEAAAAXetAKY2FzcGVyX2pvaG4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMt5VFrLeVRad'})
sleep(2)
driver.refresh()
sleep(3)
driver.quit()