Webdriver之API详解(3)
前言
前两篇API链接
https://www.cnblogs.com/linuxchao/p/linuxchao-selenium-apione.html
https://www.cnblogs.com/linuxchao/p/linuxchao-selenium-apitwo.html
①操作多选的选择列表
被测HTML代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>操作多选列表</title>
</head>
<body>
<select name="fruit" size="6" multiple=true>
<option id="peach" value="taozi">桃子</option>
<option id="watermelon" value="xigua">西瓜</option>
<option id="orange" value="juzi">橘子</option>
<option id="kiwifruit" value="nihoutao">猕猴桃</option>
<option id="maybush" value="shanzha">山楂</option>
<option id="litchi" value="lizhi">荔枝</option>
</select>
</body>
</html>
调用API实例代码
def testMultipleOptions(self):
from selenium.webdriver.support.ui import Select
import time
self.driver.get(r'file:///C:/Users/v-xug/Desktop/multipleOptions.html')
select_element = Select(self.driver.find_element_by_xpath('//select'))
# 通过序号选择第一个元素
select_element.select_by_index(0)
# 通过文本选择山楂
select_element.select_by_visible_text('山楂')
# 通过选项的value属性值选择value=猕猴桃
select_element.select_by_value('nihoutao')
# 打印所有选中文本
for option in select_element.all_selected_options:
print(option.text)
# 再次选中3个选项
select_element.select_by_index(1)
select_element.select_by_value('juzi')
select_element.select_by_visible_text('荔枝')
# 取消3个选项
select_element.deselect_by_index(0)
select_element.deselect_by_value('nihoutao')
select_element.deselect_by_visible_text('山楂')
实例代码
桃子
猕猴桃
山楂
.
----------------------------------------------------------------------
Ran 1 test in 10.988s OK Process finished with exit code 0
输出
说明
运行这段代码看到的效果是,先选择3个选项并打印被选择的选项的文本值,再次选中3个选项并取消之前被选中的3个选项,对于可以多选的操作列表,上面的几个方法是很实用的,当然实际中可能遇见各种不同的情况,还需多积累经验对不同问题用不同方法。
②操作可以输入的下拉列表(输入的同时模拟按键)
被测HTML代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>操作可输入下拉列表,输入的同时模拟按键</title>
</head>
<body>
<div style="position:relative;">
<input list="pasta" id="select">
<datalist id="pasta">
<option>Bavette</option>
<option>Rigatoni</option>
<option>Fiorentine</option>
<option>Gnocchi</option>
<option>Tagliatelle</option>
<option>Penne lisce</option>
<option>Pici</option>
<option>Pappardelle</option>
<option>Spaghetti</option>
<option>Cannelloni</option>
<option>Cancl</option>
</datalist>
</div>
</body>
</html>
调用API实例代码
def testInputSelect(self):
self.driver.get(r'file:///C:/Users/v-xug/Desktop/inputselect.html')
from selenium.webdriver.common.keys import Keys
inputselect = self.driver.find_element_by_id('select')
inputselect.clear()
import time
time.sleep(1)
# 输入的同时按下箭头键
inputselect.send_keys('c', Keys.ARROW_DOWN)
time.sleep(1)
inputselect.send_keys(Keys.ARROW_DOWN)
time.sleep(1)
inputselect.send_keys(Keys.ENTER)
time.sleep(3)
操作可输入下拉列表
说明
运行这段代码可以看到输入框输入c的同时下拉选项会筛选出数据,且选中筛选出的第一项,但是在某些浏览器中不会看到效果(我写完运行时看到的效果就没有)。keys模块提供了很多其他的模拟按键,可以通过dir()查看Keys的功能
③操作单选框
被测HTML代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>操作单选框</title>
</head>
<body>
<form>
<input type="radio" name="fruit" value="berry" />草莓</input>
<br />
<input type="radio" name="fruit" value="watermelon" />西瓜</input>
<br />
<input type="radio" name="fruit" value="orange" />橙子</input>
</form>
</body>
</html>
调用API实例代码
def testRadio(self):
import time
self.driver.get(r'file:///C:/Users/v-xug/Desktop/radio.html')
# 定位到草莓选项
time.sleep(2)
berry = self.driver.find_element_by_xpath("//input[@value='berry']")
berry.click()
# 断言是否被选中
self.assertTrue(berry.is_selected()) if berry.is_selected():
# 如果被选中了重新选择西瓜选项
watermelon = self.driver.find_element_by_xpath("//input[@value='watermelon']")
watermelon.click()
# 断言草莓未被选中
self.assertFalse(berry.is_selected())
# 查找所有的选项
options = self.driver.find_elements_by_xpath("//input[@name='fruit']")
# 遍历所有的选项,如果找到orange且未被选中,那么就选中这项
for option in options:
if option.get_attribute('value')=='orange':
if not option.is_selected():
option.click()
实例代码
④操作复选框
被测HTML代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>操作复选框</title>
</head>
<body>
<form name="form1">
<input type="checkbox" name="fruit" value="berry" />草莓</input>
<input type="checkbox" name="fruit" value="watermelon" />西瓜</input>
<input type="checkbox" name="fruit" value="orange" />橙子</input>
</form>
</body>
</html>
调用API实例代码
def testCheckBox(self):
self.driver.get(r'file:///C:/Users/v-xug/Desktop/checkbox.html')
# 选中一个选项并取消
berry = self.driver.find_element_by_xpath("//input[@value='berry']")
berry.click()
# 断言是否被选中
self.assertTrue(berry.is_selected())
# 取消选中
if berry.is_selected():
berry.click()
# 遍历所有的选项并选中所有的选项
options = self.driver.find_elements_by_xpath("//input[@name='fruit']")
for option in options:
if not option.is_selected():
option.click()
实例代码
⑤断言页面源码中的关键字
被测地址
http://www.baidu.com
def testAssertIn(self):
self.driver.get('http://www.baidu.com')
self.driver.find_element_by_id('kw').send_keys('linux超')
self.driver.find_element_by_id('su').click()
import time
time.sleep(4)
self.assertIn('linux超', self.driver.page_source, msg='页面源码中不存在该关键字')
实例代码
说明
有时候会出现页面存在要断言的关键字,但是结果仍然断言失败, 这有可能是由于页面没有加载完全就开始断言语句, 导致要断言的内容在页面源码中找不到。
⑥对当前浏览器窗口截屏
被测地址
http://www.baidu.com
def testScreenShot(self):
self.driver.get('http://www.baidu.com')
try:
# 使用get_screenshot_as_file(filename)方法,对浏览器当前打开的页面截图,并保存在当前目录下
self.driver.get_screenshot_as_file('baidu.png')
except IOError as e:
print(e)
实例代码
截图

说明
调用截屏函数get_screenshot_as_file()截图成功后会返回True,如果发生了IOError异常,会返回False。函数中传递的参数可以是绝对路径也可以是相对路径;当自动化测试过程中,未实现预期结果,可以将页面截图保存,方便更快速地定位问题。
⑦拖拽页面元素
被测地址
http://jqueryui.com/resources/demos/draggable/scroll.html
调用API实例代码
def testDragDrop(self):
import time
self.driver.get(r'http://jqueryui.com/resources/demos/draggable/scroll.html')
element1 = self.driver.find_element_by_id('draggable')
element2 = self.driver.find_element_by_id('draggable2')
element3 = self.driver.find_element_by_id('draggable3')
from selenium.webdriver import ActionChains
action = ActionChains(self.driver)
# 把第一个元素拖拽到第二个元素的位置
action.drag_and_drop(element1, element2).perform()
# 把第三个元素拖拽10个像素,拖拽2次
for i in range(2):
action.drag_and_drop_by_offset(element3,10,10).perform()
time.sleep(2)
action.release()
实例代码
说明:ActionChains模块在前面已经涉及到过了,所有的和鼠标操作有关的动作都需要使用此模块模拟
⑧模拟键盘单个按键操作
被测地址
http://www.sogou.com
调用API实例代码
def testSingleKey(self):
import time
self.driver.get('http://www.sogou.com')
query = self.driver.find_element_by_id('query')
# 导入模拟按键模块
from selenium.webdriver.common.keys import Keys
# 输入框发送一个f12按键
query.send_keys(Keys.F12)
time.sleep(2)
# 输入框中输入搜索内容并按下回车键
query.send_keys('selenium')
query.send_keys(Keys.ENTER)
time.sleep(2)
实例代码
说明
有些电脑运行这个代码可能看不到效果,因为有的电脑的F12键 是需要和Fn组合才能生效的。
总结
今天的整理到此结束,说实话我不知道对读到我文章的人帮助有多大,但是对我个人而言是又经历了一次知识的梳理。把之前忘记的也都慢慢的想起来了,虽然每个实例看着都挺简单的,其实耗费了我很多精力和时间,因为我想让读到我博客的人只看一次代码只运行一次实例就能知道实现的是什么功能,能把这个功能应用到复杂的测试场景中。其实这也是我自己的一次自我总结把!
Webdriver之API详解(3)的更多相关文章
- Webdriver之API详解(1)
说明 Webdriver API详解,基于python3,unittest框架,driver版本和浏览器自行选择. 本内容需要对python3的unittest框架有一个简单的了解,这里不再赘述,不了 ...
- Webdriver之API详解(2)
前言:今天继续上一篇文章https://www.cnblogs.com/linuxchao/p/linuxchao-selenium-apione.html分享selenium' webdriver ...
- Java 8 Stream API详解--转
原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java8引入了 ...
- jqGrid APi 详解
jqGrid APi 详解 jqGrid皮肤 从3.5版本开始,jqGrid完全支持jquery UI的theme.我们可以从http://jqueryui.com/themeroller/下载我们所 ...
- hibernate学习(2)——api详解对象
1 Configuration 配置对象 /详解Configuration对象 public class Configuration_test { @Test //Configuration 用户 ...
- 网络编程socket基本API详解(转)
网络编程socket基本API详解 socket socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket ...
- 转】Mahout推荐算法API详解
原博文出自于: http://blog.fens.me/mahout-recommendation-api/ 感谢! Posted: Oct 21, 2013 Tags: itemCFknnMahou ...
- dom4j api 详解--XPath 节点详解
dom4j api 详解 http://871421448.iteye.com/blog/1546955 XPath 节点 http://www.w3school.com.cn/xpath/xpath ...
- 百度地图API详解之事件机制,function“闭包”解决for循环和监听器冲突的问题:
原文:百度地图API详解之事件机制,function"闭包"解决for循环和监听器冲突的问题: 百度地图API详解之事件机制 2011年07月26日 星期二 下午 04:06 和D ...
随机推荐
- SQL Server死锁中的会话隔离级别为序列化(Serializable)实验测试
最近在分析SQL Server的死锁时,发现一个比较有意思的现象,发现死锁当中一个会话的隔离级别为序列化(Serializable),这个是让人比较奇怪的地方,我们知道SQL Server数据库的默认 ...
- OutOfMemoryError/OOM/内存溢出异常实例分析--堆内存溢出
Java堆内存溢出 只要不断创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象, 那么在对象数量到达最大堆的容量限制后就会产生内存溢出异常,代码如下: import ...
- 在linux系统部署Svn
步骤一:安装subversion 1) 连接xshell,在xshell输入命令:yum install subversion 2) 查看安装svn服务的版本:svnserve --version ...
- 对 Undefined 与 Null 的一些理解
Undefined 和 Null 是 Javascript 中两种特殊的原始数据类型(Primary Type),它们都只有一个值,分别对应 undefined 和 null ,这两种不同类型的值,既 ...
- 开源的类似于Apache ab的压力测试命令行工具SuperBenchmarker
SuperBenchmarker 是ㄧ个开源的类似于Apache ab的压力测试命令行工具.可以在 .NET 4.52+ 或者 .NET Core 2.0+ 平台上运行. 可支持Get.Post.Pu ...
- Jdk1.8中的HashMap实现原理
HashMap概述 HashMap是基于哈希表的Map接口的非同步实现.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒久不变. HashM ...
- Java8与传统的日期和时间类详解
一.传统的日期时间类(Date和Calendar) 1. Date类 这里的Date是位于java.util包下的类,而不是java.sql包下的date类,Date对象即包含日期也包含时间,从JDK ...
- js随机背景颜色
// 要求: 随机生成颜色RGB 核心点 :(0,0,0) rgb 每一组的数字取值范围是 0~255 // 需要随机生成 0~255 之间的整数 function getRandom(min, ma ...
- 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之二 || 后端项目搭建
前言 至于为什么要搭建.Net Core 平台,这个网上的解释以及铺天盖地,想了想,还是感觉重要的一点,跨平台,嗯!没错,而且比.Net 更容易搭建,速度也更快,所有的包均有Nuget提供,不再像以前 ...
- 使用 .NET Core 开发 BT Tracker 服务器
一.什么是 BT Tracker ? 在 BT 下载过程当中,我们如果拿到一个种子文件,在其内部会包含一组 BT Tracker 服务器信息.在开始进行下载的时候,BT 下载工具会根据种子内的唯一 H ...