介绍

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实现 LeetCode 275 H指数 II

    275. H指数 II 给定一位研究者论文被引用次数的数组(被引用次数是非负整数),数组已经按照升序排列.编写一个方法,计算出研究者的 h 指数. h 指数的定义: "h 代表"高 ...

  2. Java实现 蓝桥杯VIP 算法提高 前10名

    算法提高 前10名 时间限制:1.0s 内存限制:256.0MB 问题描述 数据很多,但我们经常只取前几名,比如奥运只取前3名.现在我们有n个数据,请按从大到小的顺序,输出前10个名数据. 输入格式 ...

  3. java实现第五届蓝桥杯六角填数

    六角填数 题目描述 如图[1.png]所示六角形中,填入1~12的数字. 使得每条直线上的数字之和都相同. 图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少? 请通过浏览器提交答案,不 ...

  4. Python 读取和输出到txt

    读txt文件 python常用的读取文件函数有三种read().readline().readlines() read() #一次性读取文本中全部的内容,以字符串的形式返回结果 with open(& ...

  5. Linux: ssh命令 远程登录

    1.查看SSH客户端版本 使用ssh -V命令可以得到版本号.需要注意的是,Linux一般自带的是OpenSSH; $ ssh -V ssh: SSH Secure Shell 3.2.9.1 (no ...

  6. 解决Zabbix 5.0不能选择中文和中文乱码问题

    Zabbix web界面不能选择中文,提示: You are not able to choose some of the languages, because locales for them ar ...

  7. Node.js环境安装

    为其他使用先小小的接触这个环境,如不出意外,未来的一些时候抽时间会系统的学习element-ui, JavaScript, vue, node.js, 稍后也做个简易的ACE Editor体验一下 1 ...

  8. 多应用下 Swagger 的使用,这可能是最好的方式!

    问题 微服务化的时代,我们整个项目工程下面都会有很多的子系统,对于每个应用都有暴露 Api 接口文档需要,这个时候我们就会想到 Swagger 这个优秀 jar 包.但是我们会遇到这样的问题,假如说我 ...

  9. %matplotlib inline的含义

    用在Jupyter notebook中具体作用是当你调用matplotlib.pyplot的绘图函数plot()进行绘图的时候,或者生成一个figure画布的时候,可以直接在你的python cons ...

  10. SpringMVC整合mybaitis

    目录 一.新建一个基于Maven的Web项目 二.创建数据库与表 三.添加依赖包 四.新建POJO实体层 五.新建MyBatis SQL映射层 六.完成Spring整合MyBatis配置 七.创建服务 ...