1、安装Selenium:
命令行安装:在线安装-pip install selenium;离线安装:准备好的安装包放到site-packages下,执行命令:python setup.py install
官网安装:https://www.python.org/downloads/
https://www.seleniumhq.org/download
2、安装浏览器驱动:
Chrome的驱动chromedriver 下载地址:
http://chromedriver.storage.googleapis.com/index.html
http://npm.taobao.org/mirrors/chromedriver/
Firefox的驱动geckodriver 下载地址:
https://github.com/mozilla/geckodriver/releases/
版本映射:https://blog.csdn.net/u013250071/article/details/78803230
IE的驱动IEDriverServer 下载地址:
http://selenium-release.storage.googleapis.com/index.html
MS的WebDriver下载地址:
https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
3、webdriver简介
1)支持的浏览器
Google Chrome、Internet Explorer、Firefox、Opera、Edge(3.X支持)
2)支持的平台
Linux、Windows、Mac
3)支持的语言
Java、Python、Ruby、Php、C#、JavaScript
4、Selenium版本历史
1)Selenium V1.0:Selenium RC(远程控制-Client和Selenium Server)、 Selenium IDE(集成开发环境)、selenium Grid(用于实现分布式测试)
备注:Selenium 1.0使用的是Javascript注入技术与浏览器打交道,需要SeleniumRC启动一个Server,将操作Web元素的API调用转化为一段段Javascript,在Selenium内核启动浏览器之后注入这段Javascript
2)Selenium V2.0:Selenium1.0、WebDriver
备注:Selenium RC 在浏览器中运行 JavaScript 应用,而 WebDriver 通过原生浏览器支持或者浏览器扩展直接控制浏览器;此版本比较稳定,支持chrome任意版本或者firefox38-45的版本
3)Selenium V3.0: Selenium IDE(集成开发环境)、selenium Grid(用于实现分布式测试)、WebDriver
备注:使用此版本,需要安装jdk8
5、WebDriver的实现原理
1)Webdriver启动目标浏览器, 并绑定到端口. 该启动的浏览器实例, 做为WebDriver的Remote Server
2)Client端通过Commandexecuter发送Httprequest给Remote Server的侦听端口(通信协议: The Webdriver Wire Protocol)
3)Remote Server需要依赖原生的浏览器组件(如: Iedriver.Dll, Chromedriver.Exe), 来转化浏览器的Native调用
6、WebDriver常用API
1)浏览器操作类:
webdriver.Chrome();driver.get();
driver.back();driver.forward();
driver.set_window_size();driver.maximize_window();driver.minimize_window();
driver.quit()---关闭所有网页;driver.close()---关闭当前焦点
2)页面元素定位属性:id;name;class name;tag name;link text;partial link text;xpath;css selector
3)页面元素简单定位方法:
find_element_by_id()
find_element_by_name()
find_element_by_class_name()
find_element_by_tag_name()
find_element_by_xpath()
4)定位方法使用原则:
id-》name-》class name-》tagname-》linkText(partialLinkText)-》xpath-》css
5)常用操作
清除:clear()
键盘输入数据:send_keys()
点击:click()
文本信息:text
获取属性:get_attribute(name)-》driver.find_element_by_id('username').get_attribute('value');driver.find_element_by_id('username').get_attribute('id')
复选框:is_displayed()-》driver.find_element_by_id('savelogin').is_displayed();driver.find_element_by_id('savelogin').is_enabled();print(driver.find_element_by_id('savelogin').is_selected()
下拉列表(补:from selenium.webdriver.support.ui import Select):Select-》Select(driver.find_element_by_id("type")).select_by_value("Suggestion")
按钮操作:alert/confirm/prompt;使用switch_to.alert()来定位, 然后使用text/accept/dismiss/send_keys按需进行操作;driver.switch_to.alert.accept()
6)等待方式
强制等待:---》强制等待
示例:time.sleep(2)
隐式等待:---》设置超时时间,等待页面加载;每个元素都会等待,比较耗时
示例:driver.implicitly_wait(30)
显式等待(补:from selenium.webdriver.support.wait import WebDriverWait):----》等待元素加载,针对某个元素的明确等待
示例:WebDriverWait(driver,10,0.5).until(lambda driver:driver.find_element_by_link_text("注销"))
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
driver - WebDriver 的驱动程序(IE, Firefox, Chrome 或远程)
timeout - 最长超时时间,默认以秒为单位
poll_frequency - 休眠时间的间隔(步长)时间,默认为0.5 秒
ignored_exceptions - 超时后的异常信息,默认情况下抛NoSuchElementException 异常
7)对话框
使用二次定位找到元素, 然后进行操作
8)内嵌页面
切入:使用switch_to.frame()方法,把当前定位的主休切换到B frame里
切回:使用switch_to.default_content()从B frame切换回A frame
9)文件上传
直接使用send_keys
10)查找多个元素(这些方法将返回一个列表):
find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector