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的主要内容,如果未能解决你的问题,请参考以下文章

WebDriver API——鼠标及键盘操作Actions

必须收藏:Selenium webdriver API 大全

Firefox 使用 webdriver python API 时无法打开 url

onActivityResult 未在 Android API 23 的片段上调用

WebDriver API

WebDriver API