WebDriver API
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WebDriver API相关的知识,希望对你有一定的参考价值。
WebDriver 属于selenium体系中设计出来操作浏览器的一套API。
在webdriver角度上,因他针对多种编程语言都实现了一遍这套API,所以他可以支持多种编程语言;在编程语言的角度,webdriver是python的一个用于实现web自动化的第三方库
一、WebDriver 原理
webdriver是按照server-client的设计模式设计的:
server端就是remote server,可以是任意浏览器。当脚本启动浏览器后,浏览器就是remote server,他的职责就是等待client发送请求并做出响应。
client是我们的测试代码了,代码中的一些行为(打开浏览器、跳转URL等)操作是以http请求的方式发送给被测试浏览器的(remote server)。remote server接受请求,执行相应操作并在response中返回执行状态、返回值等
webdriver 工作流程:
1.webdriver启动浏览器,并绑定到指定的端口。启动浏览器实例将作为webdriver的remote server
2.client端通过commandexcuter 发送httprequest给remote server的侦听端口(通信协议:the webriver wire protocol)
3.remote server需要依赖原声的浏览器组件(如IEDriverServer.exe、chromedriver.exe)来转化浏览器的native调用
python提供了logging模块给运行中的应用提供了一个标准的信息输出接口:
from selenium import webdriver
import logging
logging.basicConfig(level=logging.DEBUG) #此模式能捕获到客户端向服务端发送的post请求
diver = webdriver.Ie()
diver.get("http://www.baidu.com")
diver.find_element_by_id("kw").send_keys("selenium")
diver.find_element_by_id("su").click()
diver.quit()
C:\Users\xiu\AppData\Local\Programs\Python\Python36-32\python.exe D:/study/besttest/XIU/logs/debug11.py
DEBUG:selenium.webdriver.remote.remote_connection:POST http://127.0.0.1:51379/session {"capabilities": {"firstMatch": [{}], "alwaysMatch": {"browserName": "internet explorer"}}, "desiredCapabilities": {"browserName": "internet explorer", "version": "", "platform": "WINDOWS"}}
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
DEBUG:selenium.webdriver.remote.remote_connection:POST http://127.0.0.1:51379/session/b13cead7-a113-4840-8a19-14b58ae3aaaf/url {"url": "http://www.baidu.com", "sessionId": "b13cead7-a113-4840-8a19-14b58ae3aaaf"}
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
DEBUG:selenium.webdriver.remote.remote_connection:POST http://127.0.0.1:51379/session/b13cead7-a113-4840-8a19-14b58ae3aaaf/element {"using": "id", "value": "kw", "sessionId": "b13cead7-a113-4840-8a19-14b58ae3aaaf"}
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
DEBUG:selenium.webdriver.remote.remote_connection:POST http://127.0.0.1:51379/session/b13cead7-a113-4840-8a19-14b58ae3aaaf/element/416ba0b6-a972-45c7-a25e-d37dfe5729c5/value {"text": "selenium", "value": ["s", "e", "l", "e", "n", "i", "u", "m"], "id": "416ba0b6-a972-45c7-a25e-d37dfe5729c5", "sessionId": "b13cead7-a113-4840-8a19-14b58ae3aaaf"}
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
DEBUG:selenium.webdriver.remote.remote_connection:POST http://127.0.0.1:51379/session/b13cead7-a113-4840-8a19-14b58ae3aaaf/element {"using": "id", "value": "su", "sessionId": "b13cead7-a113-4840-8a19-14b58ae3aaaf"}
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
DEBUG:selenium.webdriver.remote.remote_connection:POST http://127.0.0.1:51379/session/b13cead7-a113-4840-8a19-14b58ae3aaaf/element/5d135cb0-7222-4978-9d52-2950eca2b63e/click {"id": "5d135cb0-7222-4978-9d52-2950eca2b63e", "sessionId": "b13cead7-a113-4840-8a19-14b58ae3aaaf"}
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
DEBUG:selenium.webdriver.remote.remote_connection:DELETE http://127.0.0.1:51379/session/b13cead7-a113-4840-8a19-14b58ae3aaaf {"sessionId": "b13cead7-a113-4840-8a19-14b58ae3aaaf"}
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
Process finished with exit code 0
二、元素定位(id、name、class、tag、link、partial link、Xpath、CSS、By九种方法定位元素)
from selenium import webdriver
driver = webdriver.Ie()
driver.get(‘http://www.baidu.com‘)
# driver.find_element_by_id(‘kw‘).send_keys(‘selenium 自动化测试‘) #id定位
# driver.find_element_by_name(‘wd‘).clear() #name定位
# driver.find_element_by_class_name(‘s_ipt‘).send_keys(‘selenium‘) #class定位
# driver.find_element_by_tag_name(‘input‘).clear() #--tag定位。一个界面可能会有很多相同的tag,因此此定位方法识别某个元素的概率很低,一般不单独用
# driver.find_element_by_link_text(‘新闻‘).click() #link定位
# driver.find_element_by_partial_link_text(‘《不忘初心 继续前进》‘).click() #对link定位的一个补充,支持通过元素标签之间的部分文本信息来定位
#xpath定位
# driver.find_element_by_xpath(‘/html/body/div[2]/div/div/div/div/form/span[1]/input‘).clear() #绝对路径
# driver.find_element_by_xpath("//*[@id=‘kw‘]").send_keys(‘seleium2‘) #元素属性定位
# driver.find_element_by_xpath("//*[@name=‘wd‘]").clear() #元素属性定位
# driver.find_element_by_xpath("//*[@class=‘s_ipt‘]").send_keys(‘seleium3‘) #元素属性定位
#层级与属性结合
# driver.find_element_by_xpath("//form[@id=‘form‘]/span[1]/input").clear() #通过父元素进行定位
#使用逻辑运算符
# driver.find_element_by_xpath("//input[@id=‘kw‘ and @class=‘s_ipt‘]").send_keys(‘seleium4‘)
#CSS定位
# driver.find_element_by_css_selector(‘.s_ipt‘).send_keys(‘css定位-class‘) #通过class属性定位
# driver.find_element_by_css_selector(‘#kw‘).send_keys(‘css定位-id‘) #通过id属性定位
# driver.find_element_by_css_selector(‘input‘) #通过标签定位
# driver.find_element_by_css_selector(‘form>span>input‘).click() #通过父子关系定位
# driver.find_element_by_css_selector(‘form>span>input.s_ipt‘).click() #组合定位
# driver.find_element_by_css_selector(‘form>span>input#kw‘).click() #组合定位
# driver.find_element_by_css_selector(‘form.fm>span>input#su‘).click() #组合定位
from selenium.webdriver.common.by import By
#用by元素定位
# driver.find_element(By.ID,"kw").send_keys(‘By元素定位-id‘)
# driver.find_element(By.ID,"kw").clear()
# driver.find_element(By.NAME,"wd").send_keys(‘By元素定位-name‘)
# driver.find_element(By.NAME,"wd").clear()
# driver.find_element(By.CLASS_NAME,"s_ipt").send_keys(‘By元素定位-class-name‘)
# driver.find_element(By.CLASS_NAME,"s_ipt").clear()
# driver.find_element(By.TAG_NAME,"input").send_keys("By元素定位-input")
# driver.find_element(By.TAG_NAME,"input").clear()
# driver.find_element(By.LINK_TEXT,"新闻").click()
# driver.find_element(By.PARTIAL_LINK_TEXT,"新").click()
# driver.find_element(By.XPATH,"//*[@class=‘bg s_btn‘]").click()
三、控制浏览器
import time
#控制浏览器大小(设置浏览器宽800,高600)
# driver.set_window_size(800,600)
#控制浏览器后退、前进
# driver.find_element_by_link_text(‘新闻‘).click()
# driver.back() #后退
# driver.forward() #前进
#模拟浏览器刷新
# driver.find_element_by_id("kw").send_keys("selenium")
# driver.find_element_by_id("su").click()
# time.sleep(2)
# driver.refresh()
# driver.quit()
四、简单元素操作
from selenium import webdriver
import time
driver = webdriver.Ie()
# driver.get(‘https://login.xiu.com/‘)
#clear() 清除文本
#send_keys() 模拟按键输入
#click() 单击元素
#模拟走秀网登录
# driver.find_element_by_link_text("密码登录").click()
# driver.find_element_by_id("J_username").clear()
# driver.find_element_by_id("J_username").send_keys("13684995613")
# driver.find_element_by_id("J_password").clear()
# driver.find_element_by_id("J_password").send_keys("[email protected]")
# driver.find_element_by_id("login_Btn").click()
# driver.quit()
#webelement接口常用方法
driver.get("http://www.baidu.com")
# driver.find_element_by_id("kw").send_keys("webelement接口常用方法")
# driver.find_element_by_id("kw").submit() #用于提交表单
# print(driver.find_element_by_id("kw").size) #获得输入框尺寸({‘height‘: 22, ‘width‘: 500})
# print(driver.find_element_by_id("cp").text) #获得text值(?2017 Baidu 使用百度前必读 意见反馈 京ICP证030173号 京公网安备11000002000001号 )
# print(driver.find_element_by_id("kw").get_attribute(‘type‘)) #获得元素的属性(text):id/name/type或其他任意属性
# print(driver.find_element_by_id("kw").is_displayed()) #返回元素是否可见(True)
五、鼠标事件
六、键盘事件
七、获得验证码信息
八、设置元素等待
九、定位一组元素
十、多表单切换
十一、多窗口切换
十二、警告框处理
十三、上传文件
十四、下载文件
十五、操作cookie
十六、调用javascript
十七、窗口截图
十八、窗口关闭
十九、验证码处理
二十、处理HTML5的视频播放
以上是关于WebDriver API的主要内容,如果未能解决你的问题,请参考以下文章
必须收藏:Selenium webdriver API 大全
Firefox 使用 webdriver python API 时无法打开 url