介绍

selenium

Selenium是一个浏览器自动化操作框架。selenium主要由三种工具组成。

  1. 第一个工具——SeleniumIDE,是Firefox的扩展插件,支持用户录制和回访测试。录制/回访模式存在局限性,对许多用户来说并不适合。
  2. 因此第二个工具——Selenium WebDriver提供了各种语言环境的API来支持更多控制权和编写符合标准软件开发实践的应用程序。
  3. 最后一个工具——SeleniumGrid帮助工程师使用Selenium API控制分布在一系列机器上的浏览器实例,支持并发运行更多测试。

    在项目内部,它们分别被称为“IDE”、“WebDriver”和“Grid”。

webdriver

WebDriver 是一种用于 Web 应用程序的自动测试工具,提供了一套友好的 API,方便我们进行操作。

chromedriver下载安装

1、下载

chromedriver要与本地浏览器版本一致

下载地址(极客时间)

http://npm.taobao.org/mirrors/chromedriver/

2、使用

mac中将chromedriver解压后放在usr/local/bin下

windows将 Chrome 浏览器目录添加到系统的环境变量 Path中

或者在使用时直接指定chromedriver路径

chrome_driver = "C:\Users\cheny\AppData\Local\Google\Chrome\Application\chromedriver.exe"
driver = webdriver.Chrome(executable_path=chrome_driver)

3、测试

from selenium import webdriver
import time wd = webdriver.Chrome()
wd.get("https://www.baidu.com") # 打开百度浏览器
wd.find_element_by_id("kw").send_keys("selenium") # 定位输入框并输入关键字
wd.find_element_by_id("su").click() #点击[百度一下]搜索
time.sleep(3) #等待3秒
wd.quit() #关闭浏览器

WebDriver常用操作

1、浏览器操作

from selenium import webdriver
driver = webdriver.Chrome() #属性:
driver.current_url #用于获得当前页面的URL
driver.title #用于获取当前页面的标题
driver.page_source #用于获取页面html源代码
driver.port #用于获取浏览器的端口
driver.capabilities['version'] #打印浏览器version的值 #浏览器:
driver.get(url) #浏览器加载url
driver.back() #浏览器后退
driver.forward() #浏览器前进
driver.refresh() #浏览器刷新(点击刷新按钮)
driver.set_page_load_timeout(5) #设置页面加载时间,如果超时会跑异常
driver.implicitly_wait(秒) #隐式等待,通过一定的时长等待页面上某一元素加载完成。
#若提前定位到元素,则继续执行。等待10s若超过时间未加载出,则抛出NoSuchElementException异常。 #执行js:
driver.execute_script(js) #调用js #互动到页面下方的两种方法(有的页面滑到底部会有加载更多)
js = "var q=document.documentElement.scrollTop=9000" #1
js = "window.scrollTo(0,document.body.scrollHeight)" #2
wd.execute_script(js)

2、窗口和弹框操作

#窗口:
driver.current_window_handle #用于获取当前窗口句柄
driver.window_handles #用于获取所有窗口句柄 driver.maximize_window() #将浏览器最大化显示
driver.set_window_size(480, 800) #设置浏览器宽480、高800显示
driver.get_window_size() #获取当前窗口的长和宽
driver.get_window_position() #获取当前窗口坐标
driver.set_window_position(300,200) #设置当前窗口坐标
driver.get_screenshot_as_file(filename) #截取当前窗口
#实例:driver.get_screenshot_as_file('D:/selenium/image/baidu.jpg') driver.close() #关闭当前窗口,或最后打开的窗口
driver.quit() #关闭所有关联窗口,并且安全关闭session #窗口切换:
driver.switch_to_frame(id或name属性值)#切换到新表单(同一窗口)。若无id或属性值,可先通过xpath定位到iframe,再将值传给switch_to_frame()
driver.switch_to.parent_content()#跳出当前一级表单。该方法默认对应于离它最近的switch_to.frame()方法
driver.switch_to.default_content() #跳回最外层的页面
driver.switch_to_window(窗口句柄) #切换到新窗口
driver.switch_to.window(窗口句柄) #切换到新窗口 #弹框切换:
driver.switch_to_alert() #警告框处理。处理JavaScript所生成的alert,confirm,prompt
driver.switch_to.alert() #警告框处理

3、cookies 操作

driver.get_cookies()   #获取当前会话所有cookie信息
driver.get_cookie(cookie_name) #返回字典的key为“cookie_name”的cookie信息。
#实例:driver.get_cookie("NET_SessionId") driver.add_cookie(cookie_dict) #添加cookie。“cookie_dict”指字典对象,必须有name和value值
driver.delete_cookie(name,optionsString) #删除cookie信息
driver.delete_all_cookies() #删除所有cookie信息

4、简单对象的定位

'''
能通过id和name的,尽量不要用xpath和css
Id定位
唯一属性定位
组合定位
先找到相邻的元素
绝对路径
''' diver.find_element("xpath",".//a//span") #利于封装 driver.find_element_by_id()
driver.find_element_by_name()
driver.find_element_by_class_name()
driver.find_element_by_tag_name()
driver.find_element_by_link_text()
driver.find_element_by_partial_link_text() #模糊查询
driver.find_element_by_xpath()
driver.find_element_by_css_selector() #css选择定位器

5、页面元素操作

# 属性:
element.size #获取元素的尺寸。
element.text #获取元素的文本。
element.tag_name #获取标签名称 element.clear() #用于清除输入框的默认内容
element.send_keys("xx") #用于在一个输入框里输入 xx 内容
element.click() #用于单击一个按钮
element.submit() #提交表单
element.size #返回元素的尺寸
element.text #获取元素文本
element.get_attribute('value')
#返回元素的属性值,可以是id、name、type或元素拥有的其它任意属性
#如果是input的,可以通过获取value值获得当前输入的值 element.is_displayed ()
#返回元素的结果是否可见,返回结果为True或False element.is_enabled() #判断元素是否可用
element.is_selected() #返回单选按钮、复选框元素结果是否被选中(True 或 False)
element.value_of_css_property(height) #获取元素css样式属性

6、鼠标事件

#引入ActionChains类
from selenium.webdriver.common.action_chains import ActionChains mouse =driver.find_element_by_xpath("xx") #定位鼠标元素 #对定位到的元素执行鼠标操作
ActionChains(driver).context_click(mouse).perform() #鼠标右键操作
ActionChains(driver).double_click(mouse).perform() #鼠标双击操作
ActionChains(driver).move_to_element(mouse).perform() #鼠标移动到上面的操作
ActionChains(driver).click_and_hold(mouse).perform() #鼠标左键按下的操作
ActionChains(driver).release(mouse).perform() #鼠标释放 #鼠标拖拽
element = driver.find_element_by_name("xxx") #定位元素的原位置
target = driver.find_element_by_name("xxx") #定位元素要移动到的目标位置
ActionChains(driver).drag_and_drop(element, target).perform() #执行元素的移动操作

7、键盘事件

#引入Keys类包
from selenium.webdriver.common.keys import Keys element.send_keys(Keys.BACK_SPACE) #删除键(BackSpace)
element.send_keys(Keys.SPACE) #空格键(Space)
element.send_keys(Keys.TAB) #制表键(Tab)
element.send_keys(Keys.ESCAPE) #回退键(Esc)
element.send_keys(Keys.ENTER) #回车键(Enter)
element.send_keys(Keys.CONTROL,'a') #全选(Ctrl+A)
element.send_keys(Keys.CONTROL,'c') #复制(Ctrl+C)
element.send_keys(Keys.CONTROL,'x') #剪切(Ctrl+X)
element.send_keys(Keys.CONTROL,'v') #粘贴(Ctrl+V)
element.send_keys(Keys.F12) #键盘F12 #输入空格键+“python”
element.send_keys(Keys.SPACE)
element.send_keys("python")

Selenium WebDriver使用的更多相关文章

  1. Selenium WebDriver Code

    Selenium WebDriver 用于模拟浏览器的功能,可以做网站测试用,也可以用来做crawler.我是用eclipse开发的,导入selenium-server-standalone-***. ...

  2. 使用httpclient 调用selenium webdriver

    结合上次研究的selenium webdriver potocol ,自己写http request调用remote driver代替selenium API selenium web driver ...

  3. selenium webdriver 右键另存为下载文件(结合robot and autoIt)

    首先感谢Lakshay Sharma 大神的指导 最近一直在研究selenium webdriver右键菜单,发现selenium webdriver 无法操作浏览器右键菜单,如图 如果我想右键另存为 ...

  4. Selenium Webdriver java 积累一

    Selenium Webdriver 学习: http://jarvi.iteye.com/category/203994 https://github.com/easonhan007/webdriv ...

  5. Selenium的PO模式(Page Object Model)|(Selenium Webdriver For Python)

            研究Selenium + python 自动化测试有近两个月了,不能说非常熟练,起码对selenium自动化的执行有了深入的认识. 从最初无结构的代码,到类的使用,方法封装,从原始函数 ...

  6. Selenium Webdriver下click失效问题解决

    最近在使用Selenium Webdriver(Selenium2.0)进行界面自动化测试的时候发现单击事件无效,通过driver.findElement的方式是可以找到click元素的,但是就是cl ...

  7. 如何用selenium webdriver 捕获js error

    ### 问题 捕捉页面上js error ### 解决办法 从Selenium webdriver log 中解析 # -*- coding:utf8 -*- import unittest from ...

  8. Selenium WebDriver 之 PageObjects 模式 by Example

    目录 1. 项目配置 2. 一个WebDriver简单例子 3. 使用Page Objects模式 4. 总结 5. Troubleshooting 6. 参考文档 本篇文章通过例子来阐述一下Sele ...

  9. Selenium webdriver 操作日历控件

    一般的日期控件都是input标签下弹出来的,如果使用webdriver 去设置日期, 1. 定位到该input 2. 使用sendKeys 方法 比如: 但是,有的日期控件是readonly的 比如1 ...

  10. Selenium WebDriver 处理cookie

    在使用webdriver测试中,很多地方都使用登陆,cookie能够实现不必再次输入用户名密码进行登陆. 首先了解一下Java Cookie类的一些方法. 在jsp中处理cookie数据的常用方法: ...

随机推荐

  1. java实现第四届蓝桥杯梅森素数

    梅森素数 题目描述 如果一个数字的所有真因子之和等于自身,则称它为"完全数"或"完美数" 例如:6 = 1 + 2 + 3 28 = 1 + 2 + 4 + 7 ...

  2. Linux 文件特殊权限-SetUID

    SetUID非常类似于Windows中以管理员身份来运行文件,针对的是可执行文件,而且命令执行者要拥有对这个文件的执行权限,只在文件执行的过程中变换身份,最常见的passwd命令就具有SetUID权限 ...

  3. PAT 锤子剪刀布

    大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入第 1 行给出正整数 ...

  4. 「从零单排canal 02」canal集群版 + admin控制台 最新搭建姿势(基于1.1.4版本)

    canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据 订阅 和 消费.应该是阿里云DTS(Data Transfer Service)的开 ...

  5. Springboot搭建Eureka并设置Eureka登录账号密码

    Springboot搭建Eureka并设置Eureka登录账号密码 一.创建一个springboot项目 1.可以使用Spring Initializr,用浏览器打开http://start.spri ...

  6. Microsoft SQL Server Migration Assistant for MySQL(从MySQL迁移表数据到MSSQL2008R2)_3

    环境: 英文版(Windows7 64 bit + MySQL8.0.18 64 bit + MSSQL2008R2 64 bit)                           Microso ...

  7. STL sort的comp函数注意事项

    今天写了个题,结果碰巧re了,我眉头一皱发现事情并不简单. 原来我之前的comp写的都是错的. bool cmp(milkman a,milkman b) { return a.price<=b ...

  8. Android学习笔记:实现层级导航

    层级导航示例 层级导航案例 1.收下准备两个Activity的布局文件 activity_main.xml <?xml version="1.0" encoding=&quo ...

  9. 为什么Web开发人员在2020年不用最新的CSS功能

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文出处:https://dzone.com/articles/why-masses-are-not-usi ...

  10. 01 . MongoDB简介及部署配置

    简介 什么是MongoDB? MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为WEB应用 ...