Python+Selenium笔记(七):WebDriver和WebElement
(一) WebDriver
WebDriver提供许多用来与浏览器交互的功能和设置,通过WebDriver的功能和一些方法,来实现与浏览器窗口、警告、框架和弹出窗口的交互,它也提供了自动化操作浏览器导航栏、设置cookies、截屏等方便我们测试的特性。
(二) WebDriver功能及方法
|
功能/属性 |
简单说明 |
|
current_url |
获取当前页面的URL地址(driver.current_url) 下面的都是以这种方式,driver指浏览器驱动实例。 |
window_handle |
获取当前窗口的句柄 |
name |
获取该实例底层的浏览器名称 |
orientation |
获取当前设备的方位 |
page_source |
获取当前页面源代码 |
title |
获取当前页面的标题 |
window_handles |
获取当前会话里所有窗口的句柄 |
|
方法 |
简单说明 |
close() |
关闭当前浏览器窗口 |
back() |
后退一步 |
forward() |
前进一步 |
get(url) |
访问URL并加载网页到当前的浏览器会话 |
maximize_window() |
最大化浏览器窗口 |
quit() |
退出当前的驱动实例并关闭所有相关窗口 |
refresh() |
刷新当前页面 |
implicitly_wait() |
等待时间,单位为秒 |
set_page_load_timeout() |
设置一个页面完全加载完成的超时等待时间,单位为秒 |
set_script_timeout() |
设置脚本执行的超时时间 |
(三) WebElement功能及方法
通过WebElement可以实现与网站页面元素的交互,包括文本框、文本域、按钮、单选框、多选框、表格、行、列和div等。
|
功能/属性 |
简单说明 |
size |
获取元素大小(例如element.size) 下面都是以这种方式,element指定位的某个元素 |
tag_name |
获取标签的名称 |
text |
获取元素的文本值 |
|
方法 |
简单说明 |
clear() |
清除文本框或文本域的内容 |
click() |
点击元素 |
get_attribute(name) |
获取元素的属性值,name:要获取的属性名称 |
is_displayed() |
检查元素对于用户是否可见 |
is_enabled() |
检查元素是否可用 |
is_selected() |
检查元素是否被选中,主要用于单选框和复选框 |
send_keys(value) |
输入文本,value是要输入的值 |
submit() |
提交表单。如果对元素使用,将会提交该元素所属的表单 |
value_of_css_property(property_name) |
获取CSS属性的值, property_name是CSS属性的名称 |
(四) 操作表单、文本框、复选框、单选按钮
通过WebElement实现与各种HTML控件的自动化交互,例如在一个文本框输入文本、单击按钮、选择单选框或者复选框、获取元素的文本及属性值等。
例如,博客园注册功能的自动化:
(这里只是举个例子哈,直接复制是没用的,下面的代码只定位部分字段(邮箱、登录名和注册按钮),而且没有处理验证码,验证码部分以后再研究怎么处理)
def test_register_new_user(self):
#定位并点击博客园首页的 注册
login_area = self.driver.find_element_by_css_selector('#login_area')
register = login_area.find_element_by_link_text('注册')
register.click()
#检查打开的网页标题是不是'用户注册 - 博客园'
self.assertTrue('用户注册 - 博客园' == self.driver.title)
# 定位注册页面各个字段及注册按钮
user_email = self.driver.find_element_by_id('Email')
user_login_name = self.driver.find_element_by_id('LoginName')
register_btn = self.driver.find_element_by_id('submitBtn')
# 检查字段允许的最大输入字符与最小输入字符是否与预期一致
self.assertEqual('', user_login_name.get_attribute('data-val-length-min'))
self.assertEqual('', user_login_name.get_attribute('data-val-length-max'))
# 检查各个字段及按钮对用户是否可见及可用
self.assertTrue(user_email.is_displayed() and user_email.is_enabled())
# 输入用户信息
user_email.send_keys('test@163.com')
user_login_name.send_keys('test')
# 点击注册按钮
register_btn.click()
# 检查是否显示注册成功的提示
self.assertTrue(self.driver.find_element_by_css_selector('p.txt-title.success-color').text == '注册成功')
例如,可以使用下面的方式检查博客园登录页面的复选框是否被选中
def test_login(self):
…省略打开登录页面的代码(这段就不注释了#)
automatic_login = self.driver.find_element_by_id('remember_me')
#检查登录页面复选框,是否默认不被选中
self.assertFalse(automatic_login.is_selected())
#点击选中复选框
automatic_login.click()
Python+Selenium笔记(七):WebDriver和WebElement的更多相关文章
- PYTHON 爬虫笔记七:Selenium库基础用法
知识点一:Selenium库详解及其基本使用 什么是Selenium selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium ...
- Python+Selenium笔记(九):操作警告和弹出框
#之前发的 driver.switch_to_alert() 这句虽然可以运行通过,但是会弹出警告信息(这种写法3.x不建议使用) 改成 driver.switch_to.alert就不会了. (一 ...
- python+selenium自动测试之WebDriver的常用API(基础篇二)
本篇介绍一下python+selenium复杂操作的处理,基于python3.6,selenium3.141,详细资料介绍查看官方API文档,点击这里 一.常见特殊情况处理如iframe/弹窗处理 有 ...
- Python+Selenium笔记(十四)鼠标与键盘事件
(一) 前言 Webdriver高级应用的API,允许我们模拟简单到复杂的键盘和鼠标事件,如拖拽操作.快捷键组合.长按以及鼠标右键操作,都是通过使用webdriver的Python API 中的Ac ...
- Python+selenium常用方法(Webdriver API)
小编整理了目前学习的Python+selenium常用的一些方法函数,以后有新增再随时更新. 加载浏览器驱动: webdriver.Firefox() 打开页面:get() 关闭浏览器:quit() ...
- webdriver(python)学习笔记七——多层框架定位与智能等待
多层框架或窗口定位: switch_to_frame() switch_to_window() 智能等待: implicitly_wait() 现在web应用中经常会遇到框架如(frame)或窗口(w ...
- Python+Selenium笔记(十):元素等待机制
(一) 前言 突然的资源受限或网络延迟,可能导致找不到目标元素,这时测试报告会显示测试失败.这时需要一种延时机制,来使脚本的运行速度与程序的响应速度相匹配,WebDriver为这种情况提供了隐式等待 ...
- Python+Selenium笔记(四):unittest的Test Suite(测试套件)
(一) Test Suite测试套件 一个测试套件是多个测试或测试用例的集合,是针对被测程序的对应的功能和模块创建的一组测试,一个测试套件内的测试用例将一起执行. 应用unittest的TestSui ...
- Python+Selenium笔记(三):使用unittest
#网络很慢可能会运行报错 (一) 前言 Selenium WebDriver是一个浏览器自动化测试的API集合.它提供了很多与浏览器自动化交互的特性,并且这些API主要是用于测试Web程序.如果仅 ...
随机推荐
- c++处理类型与自定义数据结构
1.typedef 类型别名 有时我们在阅读c++程序时,发现一些未见过的类型,这实际上就是typedef导致的,使用很简单,如下: typedef int wayne; wayne a = , b ...
- JavaScript -- Table
-----048-Table.html----- <!DOCTYPE html> <html> <head> <meta http-equiv="c ...
- redis集群报Jedis does not support password protected Redis Cluster configurations异常解决办法
解决spring-data-redis操作redis集群报“Jedis does not support password protected Redis Cluster configurations ...
- SpringMVC之@PathVariable 映射 URL 绑定的占位符
@PathVariable 该注解可以将URL中占位符参数绑定到方法的参数上,及ULR中{xxx}可以通过@PathVariable("xxx")绑定到方法参数中. 测试类: @R ...
- Charm Bracelet(01背包问题)
题目链接: https://vjudge.net/problem/POJ-3624 题目描述: Bessie has gone to the mall's jewelry store and spie ...
- [NOI 2016]国王饮水记
Description 题库链接 给出 \(n\) 个水杯,每个水杯装有不同高度的水 \(h_i\) ,每次可以指定任意多水杯用连通器连通后断开,问不超过 \(k\) 次操作之后 \(1\) 号水杯的 ...
- http server 简单实现
本blog主要是模仿http server的实现,使得客户端使用浏览器访问server所指定的目录. 当访问的为一个目录时, 则列出改目录下的所有文件 当访问的是文件时,则下载文件到本地 本log仅仅 ...
- V8源码边缘试探-黑魔法指针偏移
这博客是越来越难写了,参考资料少,难度又高,看到什么写什么吧! 众多周知,在JavaScript中有几个基本类型,包括字符串.数字.布尔.null.undefined.Symbol,其中大部分都可以在 ...
- [转]C# NPOI 导入与导出Excel文档 兼容xlsx, xls
本文转自:https://www.cnblogs.com/lazyneal/p/6148912.html 参考:http://www.cnblogs.com/restran/p/3889479.htm ...
- golang中的 time 常用操作
时间戳 时间戳 (例如: 1554714009) time.now().Unix() 格式时间 (例如: 2019-04-08 17:00:09) time.Now().Format("20 ...