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 ...
随机推荐
- Nginx下载服务器配置文件
server { listen 8080; server_name localhost; #charset koi8-r; charset utf-8; #access_log logs/host.a ...
- Windows -- cmd命令: ipconfig 和 nbtstat
1. ipconfig 命令格式及参数如下: 2. nbtstat 命令格式及参数如下:
- VS2013 百度云资源以及密钥
https://pan.baidu.com/s/1eu3XycWO8fWItmkFeYNv9w提取码:dy9r 密钥:BWG7X-J98B3-W34RT-33B3R-JVYW9 vs2015 http ...
- 简单读!zookeeper单机模式的启动逻辑
zk用处如此之多,以至于每个地方都要你理解zk原理! 请按如下操作姿势打开: 1. 打开zk的git仓库地址:https://github.com/apache/zookeeper , 确认过眼神,它 ...
- 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十二 || 三种跨域方式比较,DTOs(数据传输对象)初探
更新反馈 1.博友@落幕残情童鞋说到了,Nginx反向代理实现跨域,因为我目前还没有使用到,给忽略了,这次记录下,为下次补充.此坑已填 2.提示:跨域的姊妹篇——<三十三║ ⅖ 种方法实现完美跨 ...
- scala获取某个时间间隔的时间
原始 dataFrame : //获取前7天的时间long类型 def getDaytimeTime(day:Int): Long = { val cal = Calendar.getInstance ...
- 机器学习——交叉验证,GridSearchCV,岭回归
0.交叉验证 交叉验证的基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set or test set) ...
- 深度解密Go语言之Slice
目录 当我们在说 slice 时,到底在说什么 slice 的创建 直接声明 字面量 make 截取 slice 和数组的区别在哪 append 到底做了什么 为什么 nil slice 可以直接 a ...
- 使用 线性规划 解决 数字 排序问题, +Leapms模型
问题 将如下一组数字从大到小排序. {10, 20, -32, 177, 0, -11.5, 19, 7, 6.2, -6.28, -2.71, 44} 解决办法 建立数学模型,给出各个数字的次序值. ...
- 拓扑排序的 +Leapms 线性规划模型
知识点 拓扑排序 拓扑排序的+Leapms模型 无圈有向图 一个图G(V,E), 如果边有向且不存在回路,则为无圈有向图.在无圈有向图上可以定义拓扑排序.下图是一个无圈有向图的例子. 拓扑排序 给定一 ...