webdriver 属于selenium 体系中设计出来操作浏览器的一套API

1.元素的定位

  1.id属性定位

     实例:   find_element_by_id("kw")

 2.name属性定位,同id一样是属性值

   实例:  find_element_by_name("wd")

 3.class属性定位

  实例:  find_element_by_class_name("s_ipt")

 4.tag标签名定位

   实例: find_element_by_tag_name("input")

 5.link文本链接定位

  实例: find_element_by_link_text("新闻")

   partial link通过标签对之间的部分文本信息来定位元素

 实例:find_element_by_partial_link_text("部分文本信息")

 6.XPath 定位

   绝对路径定位   (div[2]表示当前层级下的第二个div)

 实例:find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span[2]/input")

   利用元素属性定位,元素的任意属性都可以使用,*表示任意标签名。

 实例:find_element_by_xpath("//input[@id='kw']")

         find_element_by_xpath("//*[@type='submit']")

  层级与属性的结合,通过上一级或上几级的属性进行定位查找

 实例:find_element_by_xpath("//span[@class='bg s_ipt_wr']/input")

         find_element_by_xpath("//form[@id='form']/span[2]/input")

  使用逻辑运算符and,多个属性来查找元素。

 实例:find_element_by_xpath("//input[@id='kw' and @class='su']/span/input")

  Firebug前端调试工具 和 FirePath插件可以方面的辅助生成XPath语法

 7.css定位

   通过class属性定位,用(.)表示

  实例:find_element_by_css_selector(".s_ipt")

  通过id属性定位。用(#)表示

  实例:find_element_by_css_selector("#kw")

  通过标签名定位

  实例:find_element_by_css_selector("input")

  通过父子关系定位

  实例:find_element_by_css_selector("span>input")

  通过属性定位  title=move mouse here  或者title$=here或者title*=mouse

  实例:find_element_by_css_selector("input[title^=move]")

  组合定位

  实例;find_element_by_css_selector("form.fm>span>input#kw")

2.控制浏览器的大小,后退,前进,刷新

from selenium import webdriver
driver = webdriver.Firefox()
driver.set_window_size(480,800)          (大小)
driver.get("https://www.baidu.com/")

print("百度首页")
driver.get("http://news.baidu.com/")
print("百度新闻")

driver.back()                                       (后退)

driver.forward()                                   (前进)
driver.quit()                                        (退出)

 driver.refresh()                                    (刷新)

3.简单的元素操作

.clear():清楚文本

.send_keys("*value"):模拟按键输入

.click():单击元素

.submit():提交表单    webelement接口常用方法,远不及click()广泛

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("http://www.126.com/")

driver.find_element_by_id("idInput").clear()
driver.find_element_by_id("idInput").send_keys("username")
driver.find_element_by_id("pwdInput").clear()
driver.find_element_by_id("pwdInput").send_keys("password")
driver.find_element_by_id("loginBtn").click()

driver.quit()
 
driver.find_element_by_id("query").submit()

 

.size:返回元素的尺寸
.text:获取元素的文本
.get_attribute('name'):获取属性值
.is_displayed():获取该元素是否用户可见
 
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")

size = driver.find_element_by_id('kw').size
print(size)
text = driver.find_element_by_id('cp').text
print(text)
attribute = driver.find_element_by_id('kw').get_attribute('type')
print(attribute)
result = driver.find_element_by_id('kw').is_displayed()
print(result)

driver.quit()
4.鼠标事件

一. 1. 引入ActionChains类才可以进行鼠标操作

  from selenium.webdriver.common.action_chains import ActionChains
     perform():对整个动作的提交动作
    context_click():右击
    double_click():双击
    drag_and_drop():拖动
    move_to_element():鼠标悬停
 2.定位到目标元素
   click = driver.find_element_by_id("XX")
 3.进行鼠标操作
   ActionChains(driver).context_click(click).perform()
   双击和悬停同右击用法一样
 二.鼠标拖放的操作 
1. 定位到原位置
   element = driver.find_element_by_id("xx")
2. 定位到目标位置
   target = driver.find_element_by_id("yy")
3. 执行拖放操作
   ActionChains(driver).drag_and_drop(element,target).perform()
5.键盘事件
  引入keys模块
from selenium.webdriver.common.keys import Keys
 输入内容
driver.find_element_by_id("kw").send_keys("selenium")
删除键
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
空格+“教程”
driver.find_element_by_id("kw").send_keys(Keys.SPACE)
driver.find_element_by_id("kw").send_keys("教程")
全选输入框内容
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)
send_keys(Keys.TAB): 制表键
send_keys(Keys.ESCAPE):回退键
send_keys(Keys.F1): 键盘F1

6.获得验证信息 

 通常用的最多的验证信息是title.URL.text

title:1.打印当前title和URL

         title = drive.title

             print(title)

        now_url=driver.current_url

             print(now_url)

      2.执行126邮箱登陆的操作

        。。。。。。。。。

      3.再次打印当前title.URL和text

        title = drive.title

             print(title)

        now_url=driver.current_url

             print(now_url)

       user= driver.find_element_by_id(“spnUid”).text

           print(user)
结果:title和URL都发生了变化,text可以获取用户文本,是很好的验证信息。
7.设置元素等待
显示等待:引入WebDriverWait,第2,3,4行
WebDriverWaituntil_not()同.until()或者until_not()配合使用
presence_of_element_located:预期判断方法。之外还有很多种
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 as EC

driver = webdriver.Firefox()
driver.get("https://www.baidu.com")

element =WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,"kw")))

element.send_keys('selenium')
driver.quit()
 
is_displayed():判断元素是否可见:也是预期判断的方法
from selenium import webdriver
from time import ctime,sleep

driver = webdriver.Firefox()
driver.get("https://www.baidu.com/")

print (ctime())
for i in range(10):
try:
el = driver.find_element_by_id("kw22")
if el.is_displayed():
break
except:pass
sleep(1)
else:
print("time out")
driver.close()
print(ctime())
隐式等待:
引入: NoSuchElementException
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from time import ctime

driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get("https://www.baidu.com/")

try:
print(ctime())
driver.find_element_by_id("kw").send_keys("selenium")
except NoSuchElementException as e:
print(e)
finally:
print(ctime())
driver.quit()
sleep:修眠方法
from time import sleep
sleep(1)
8.定位一组元素
1.打开本地html文件,需要用到os模块,引入os模块
import os
2.定位文件
file_path = 'file:///' + os.path.abspath("checkbox.html")
3.从所选文件中定位一组元素 
inputs = driver.find_elements_by_tag_name("input")
input.click()全选
部分选取
for i in inputs:
    if i.get_attribute('type') = = 'checkbox':
        i.click()
打印所有的input元素的个数
print(len()inputs)
去掉所选元素的最后一个钩pop()   pop(0):选择第一个
driver.find_elements_by_tag_name("input").pop().click()
9.多表单的切换switch_to.frame():切换表单
1,引入os模块,然后定位当前路径下的文件,找到从文件中插入表单
     import os
     file_path = 'file:///' + os.path.abspath("checkbox.html")

 2.切换到表单iframe(id=“if”),switch_to.frame():可以直接取表单的id或name属性

    如果iframe没有可用的id或name属性,可以先通过xpath定位,然后将值传给switch_to.frame()

   1.  driver.switch_to.frame("if")

   2.xf = driver.find_element_by_xpath('//*[@class="if"]')
      driver.switch_to.frame("xf")    
 3.跳出离它最近的表单switch_to.parent_content()
      driver.switch_to.parent_content()
 4.跳回最外层的页面switch_to.default_content()
      driver.switch_to.default_content()
10.多窗口的切换
  1.打开百度首页,获得当前百度首页的句柄current_window_handle
    sreach_windows = driver.current_window_handle
  2.打开第二个窗口,注册窗口,找到登陆元素.click(),找到注册元素.click()
  3.获得所有的窗口句柄:window_handles
     all_handles = driver.window_handles
  4.for handle in all_handles:
         if handle != sreach_windows:
             driver.switch_to_window(handle)   切换到注册窗口
        if handle = sreach_windows:
             driver.switch_to_window(handle)   回到搜索窗口
11.警告框处理
    使用switch_to_alert()方法定位到alert/confirm/prompt警告/确认/提示,
    然后使用text/accept/dismiss/send_keys等方法进行操作。
    text:返回alert/confirm/prompt中的文字信息
    accept():接受现有警告框
    dismiss():解散现有警告框
    send_keys(keysToSend):发送文本至警告框。keysToSend:将文本发送至警告框
实例:接受警告框
    driver.switch_to_alert().accept()
12.上传文件send_keys()实现上传
 1.引用os模块,找到当前路径下的html文件
    file_path = 'file:///' + os.path.abspath('upfile.html')
    driver.get(file_path)
 2.定位file_path文件中的上传按钮,添加本地文件
    driver.find_element_by_name('file').send_keys('D:\\upload_file.txt')
  还可以通过autoit实现上传  (不建议使用此种方法)
13.下载文件(只针对Firefox浏览器)不同的浏览器设置方法不同
为了让Firefox浏览器能实现文件的下载,需要通过对FirefoxProfile()做一些设置
1.  ("browser.download.folderList",2)
 设置成0代表下载到浏览器默认下载路径,设置成2则可以保存到制定目录。
2.("browser.download.manager.showWhenStarting",False)
 是否显示开始;True为显示,False为不显示
3.browser.download.dir
  用于指定所下载文件的目录。
  os.getcwd()
  不需要传递参数,用于返回当前目录
 4.browser.helperApps.neverAsk.saveToDisk
  指定要下载页面的Content-type值,HTTP Content-type常用对照表:http://tool.oschina.net/commons
   application/octet-stream
  为文件类型
from selenium import webdriver
import os

fp = webdriver.FirefoxProfile()
 
fp.set_preference("browser.download.folderList",2)
fp.set_preference("browser.download.manager.showWhenStarting",False)
fp.set_preference("browser.download.dir",os.getcwd())
fp.set_preference("browser.helperApps.neverAsk.saveToDisk","application/octet-stream")
driver = webdriver.Firefox(firefox_profile=fp)
driver.get("http://prpi.python.org/pypi/selenium")
driver.find_element_by_partial_link_text("selenium-2").click()
14.操作cookie  读取,添加和 删除cookie信息
 cookie的数据是以字典的形式进行存放的
 cookie = driver.get_cookies():获得所有的cookie信息
 cookie = driver.get_cookie("name"):返回字典中key为'name'的cookie信息
 add_cookie(cookie_dict):添加cookie。“cookie_dict”指字典对象,必须有name和value值(相当于记住密码)
 delete_cookie(name,optionsString):删除cookie信息。“name”是要删除的cookie的名称,“optionsString”是
                                                   该cookie的选项。目前支持的选项包括“路径”,“域”
 delete_all_cookies():删除所有cookie信息
 实例:向cookie的Name和value中添加会话信息
         driver.add_cookie({'name':'key-aaaaa','value':'value-bbbbb'})
         for cookie in driver.get_cookies():
             print("%s ->%s" %(cookie['name'],cookie['value']))
15.调用javaScript来控制浏览器的滚动条 或者向页面中的text area
     文本框输入内容
 execute_Script():来执行javaScript代码
 window.scrollTo():设置浏览器窗口滚动条的水平和垂直位置,第一个表示水平的左间距,第二个表示垂直的上边距。
实例:
from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()
driver.get("https://www.baidu.com")

driver.set_window_size(600,600)
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
sleep(5)

js = "window.scrollTo(100,450);"
driver.execute_script(js)
sleep(5)

driver.quit()
向页面中的text area 文本框输入内容
1.定义要输入的内容text
2.对文本框进行定位
3.将text与javaScript代码通过“+”进行拼接。目的:为了使输入的内容变得可自定义
4.通过execute_Script()执行javaScript代码
text = “input text”
js = "var sum=document.getElementById('id'); sum.value='" + text + "';"
driver.execute_Script(js)
16.处理html5的视频播放
  WebDriver支持在指定的浏览器上测试HTML5,如果使用javaScript来测试这些功能就可以在任何浏览器上测试HTML5了。
  arguments[]:包含了函数调用的参数数组,[0]表示取对象的第一个值
  currentSrc:返回音频视频的url。若果未设置音频视频,则返回空字符串
  load(),play(),pause()控制着视频的加载播放暂停
 1.打开播放器页面
 driver.get("http://videojs.com/")
 2.定位到播放文件
 video = driver.find_element_by_xpath("body/setion[1]/div/video")
 3.返回播放文件的地址
 url = driver.execute_script("return arguments[0].currentSrc;",video)
 print(url)
 4.播放视频
 driver.execute_script("return arguments[0].piay()",video)
5.暂停视频
driver.execute_script("arguments[0].pause",video)
17.窗口截图
 get_screenshot_as_file:截取当前窗口
 driver.get_screenshot_as_file("D:\\pyse\\baidu_img.jpg")   保存的位置
18.关闭当前窗口
close():关闭当前窗口
19.验证码的处理
 设置万能验证码
 引入randint()函数,用于生成随机整数
from random import randint
 
verify = randint(1000,9999)
print("生成的随机数:%d",%verify)
 
number = input("请输入随机数:")
print(number)
number = int(number)
 
if number == verify:
    print("登录成功")
elif number == 132741:
    print("登录成功")
else:
    print("验证码输入有误")
 
记录kookie(相当于记住密码)
 访问xx网站
driver.get("http://www.xx.com")
 将用户名密码写入浏览器cookie
 driver.add_cookie({'name':'login_username','value':'username'})
 driver.add_cookie({'name':'login_passwd','value':'passwd'})

 再次访问xx网站,将会自动登陆

 driver.get("http://www.xx.com")

20.webdriver的原理

 
 
 
 
 
 
 
 
 
 
posted @ 2017-06-05 17:02  王丽松  阅读(421)  评论(0编辑  收藏  举报