前言

今天继续上一篇文章https://www.cnblogs.com/linuxchao/p/linuxchao-selenium-apione.html分享selenium' webdriver api的用法,

⑪判断页面元素是否可见

用于测试的HTML代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>HTML中显示与隐藏元素</title>
<meta http-equiv="Content-Type" content="text/html"; charset="utf-8" />
<script type="text/javascript">
function showAndHidden1() {
var div1 = document.getElementById("div1");
var div2 = document.getElementById("div2");
if(div1.style.display=='block') div1.style.display='none';
else div1.style.display='block';
if(div2.style.display=='block') div2.style.display='none';
else div2.style.display='block'; }
function showAndHidden2() {
var div3 = document.getElementById("div3");
var div4 = document.getElementById("div4");
if(div3.style.visibility=='visible') div3.style.visibility='hidden';
else div3.style.visibility='visible';
if(div4.style.visibility=='visible') div4.style.visibility='hidden';
else div4.style.visibility='visible';
}
</script>
</head>
<body>
<div>display:元素不占用页面位置</div>
<div id="div1" style="display: block;">DIV 1</div>
<div id="div2" style="display: none;">DIV 2</div>
<input id="button1" type="button" onclick="showAndHidden1();" value="DIV切换" />
<hr>
<div>visibility:元素占用页面位置</div>
<div id="div3" style="visibility: visible;">DIV 1</div>
<div id="div4" style="visibility: hidden;">DIV 2</div>
<input id="button2" type="button" onclick="showAndHidden2();" value="DIV切换" />
</body>
</html>

调用API实例代码

     def testElementIsDisplay(self):
self.driver.get(r'file:///C:/Users/v-xug/Desktop/isdisplay.html')
# 找到div2元素
div2 = self.driver.find_element_by_id('div2')
# 判断div2元素是否可见
if div2.is_displayed():
print('div2 元素可见')
else:
print('div2 元素不可见')
# 点击第一个按钮
button1 = self.driver.find_element_by_id('button1')
button1.click()
# 再次判断div2元素是否可见
if div2.is_displayed():
print('div2 元素可见')
else:
print('div2 元素不可见')
#找到div4元素
div4 = self.driver.find_element_by_id('div4')
# 判断div4是否可见
if div4.is_displayed():
print('div4 元素可见')
else:
print('div4 元素不可见')
# 点击第二个按钮
button2 = self.driver.find_element_by_id('button2')
button2.click()
# 再次判断div4元素是否可见
if div4.is_displayed():
print('div4 元素可见')
else:
print('div4 元素不可见')

判断元素是否可见

 div2 元素不可见
div2 元素可见
div4 元素不可见
div4 元素可见
.
----------------------------------------------------------------------
Ran 1 test in 9.288s OK Process finished with exit code 0

输出

小结

通过代码的运行和输出结果,我们可以知道即使页面看不到的元素,webdriver也是可以找到的。因为隐藏的元素也是存在DOM树种的。

⑫判断元素是否可操作

用于测试的HTML代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html"; charset="UTF-8"/>
<title>HTML 中不可操作元素</title>
</head>
<body>
<input id="input1" type="text" size="40" value="可操作">
<br />
<input id="input2" type="text" size="40" value="不可用" disabled>
<br />
<input id="input3" type="text" size="40" value="只读" readonly>
</body>
</html>

调用API实例代码

     def testElementIsEnable(self):
self.driver.get(r'file:///C:/Users/v-xug/Desktop/isenable.html')
input1 = self.driver.find_element_by_id('input1')
if input1.is_enabled():
print('input1 可操作')
else:
print('input1 不可操作')
input2 = self.driver.find_element_by_id('input2')
if input2.is_enabled():
print('input2 可操作')
else:
print('input2 不可操作')
input3 = self.driver.find_element_by_id('input3')
if input3.is_enabled():
print('input3 可操作')
else:
print('input3 不可操作')

判断元素是否可操作

 input1 可操作
input2 不可操作
.
----------------------------------------------------------------------
Ran 1 test in 15.442s OK
input3 可操作 Process finished with exit code 0

输出

小结

从输出结果我们可以判断出,对元素添加了disabled属性后,元素将处于不可操作状态。

⑬获取页面元素的属性

用于测试的网址

http://www.sogou.com

调用APi实例代码

     def testGetAttribute(self):
self.driver.get('http://www.sogou.com')
query = self.driver.find_element_by_id('query')
print(query.get_attribute('name'))
query.send_keys('python')
print(query.get_attribute('value'))

获取元素的属性值

⑭双击某个元素

模拟鼠标左键双击操作

测试的HTML代码

(当双击时,输入框会变成红色)

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>模拟鼠标双击操作</title>
</head>
<body>
<input id="inputBox" type="text" ondblclick="javascript:this.style.background='red'">请双击</>
</body>
</html>

调用API实例代码

     def testDoubleClick(self):
from selenium.webdriver import ActionChains # 模拟鼠标操作事件包
import time
self.driver.get(r'file:///C:/Users/v-xug/Desktop/doubleclick.html')
# 找到要操作的元素
time.sleep(3)
inputbox = self.driver.find_element_by_id('inputBox')
action = ActionChains(self.driver)
# 模拟鼠标双击操作
action.double_click(inputbox).perform()
time.sleep(3)

模拟鼠标双击操作

小结

selenium.webdriver.ActionChains 包是WebDriver针对Python语言提供的专门用于模拟鼠标操作事件的包,比如双击,悬浮,拖拽等,后面陆续介绍

⑮操作单选下拉列表

用于测试的HTML代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>操作下拉列表</title>
</head>
<body>
<select name="fruit" size="1">
<option id="peach" value="taozi">桃子</option>
<option id="watermelon" value="xigua">西瓜</option>
<option id="orange" value="juzi" selected="selected">橘子</option>
<option id="kiwifruit" value="nihoutao">猕猴桃</option>
<option id="maybush" value="shanzha">山楂</option>
<option id="litchi" value="lizhi">荔枝</option>
</select>
</body>
</html>

调用API实例代码

遍历所有选项并打印选项显示的文本和选项值

     # 遍历下拉列表,获取下拉列表元素的所有显示值和value属性值
def testSelect(self):
import time
self.driver.get(r'file:///C:/Users/v-xug/Desktop/actionselect.html')
# 查找下拉列表元素
select = self.driver.find_element_by_name('fruit')
elements = select.find_elements_by_xpath("//option")
for element in elements:
print(element.text)
print(element.get_attribute('value'))
element.click()
time.sleep(1)

遍历单选列表

 桃子
taozi
西瓜
xigua
橘子
juzi
猕猴桃
nihoutao
山楂
shanzha
荔枝
lizhi
.
----------------------------------------------------------------------
Ran 1 test in 16.693s OK Process finished with exit code 0

输出

选择下拉列表元素的三种方法

     def testSelectOption(self):
import time
from selenium.webdriver.support.ui import Select
self.driver.get(r'file:///C:/Users/v-xug/Desktop/actionselect.html')
select_element = Select(self.driver.find_element_by_xpath('//select'))
# 打印默认选项
print(select_element.first_selected_option.text)
# 获取所有下拉选项元素
all_options = select_element.options
# 打印下拉选项的个数
print(len(all_options))
# 如果第二个选项可以操作且没有被选中,那么我们就选择这个选项
if all_options[1].is_enabled() and not all_options[1].is_selected():
# 第一个方法 通过序号选择选项 序号从0开始
select_element.select_by_index(1)
# 打印选中选项的文本
print(select_element.all_selected_options[0].text)
time.sleep(2)
# 第二种办法通过选项的文本选择选项
select_element.select_by_visible_text('猕猴桃')
# 断言选中的选项是否为猕猴桃
self.assertEqual(select_element.all_selected_options[0].text, '猕猴桃')
time.sleep(2) # 第三种方法,通过选项的value属性值选择选项
select_element.select_by_value('shanzha')
print(select_element.all_selected_options[0].text)
self.assertEqual(select_element.all_selected_options[0].text, '山楂')

选择下拉列表的3中方法

 橘子
6
西瓜
山楂
.
----------------------------------------------------------------------
Ran 1 test in 14.531s OK Process finished with exit code 0

输出

小结

selenium'_element.all_selected_options 属性获取的是所有被选中项的对象组成的列表对象,由于本实例中是单选下拉列表,因此选中项只有一个,通过select_element.all_selected_options[0].text这句代码获取被选中项的文本内容

断言单选列表的选项值

     def testAssertOptions(self):

         from selenium.webdriver.support.ui import Select
self.driver.get(r'file:///C:/Users/v-xug/Desktop/actionselect.html')
select_element = Select(self.driver.find_element_by_xpath('//select'))
# 找到所有的下拉选项
actual_options = select_element.options
# 期望列表
expect_optionslist = ['桃子','西瓜','橘子','猕猴桃','山楂','荔枝']
# 获取所有的选项的文本值
actual_optionslist = [actual_options for actual_options in map(lambda option:option.text, actual_options)]
print(actual_optionslist)
# 断言
self.assertListEqual(expect_optionslist, actual_optionslist)

总结

今天就整理这些吧,后面还有挺多实例需要整理,也都是平时工作中会经常用到的API;文章中文字说明不是很多,代码比较多,大多数我都注释过了,因为我觉得只要有点基础的都能看的懂,搞太多文字反而没有用,按照我整理的实例,自己运行一下完全能明白!当然不明白的可以加我qq!

Webdriver之API详解(2)的更多相关文章

  1. Webdriver之API详解(1)

    说明 Webdriver API详解,基于python3,unittest框架,driver版本和浏览器自行选择. 本内容需要对python3的unittest框架有一个简单的了解,这里不再赘述,不了 ...

  2. Webdriver之API详解(3)

    前言 前两篇API链接 https://www.cnblogs.com/linuxchao/p/linuxchao-selenium-apione.html https://www.cnblogs.c ...

  3. Java 8 Stream API详解--转

    原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java8引入了 ...

  4. jqGrid APi 详解

    jqGrid APi 详解 jqGrid皮肤 从3.5版本开始,jqGrid完全支持jquery UI的theme.我们可以从http://jqueryui.com/themeroller/下载我们所 ...

  5. hibernate学习(2)——api详解对象

    1   Configuration 配置对象 /详解Configuration对象 public class Configuration_test { @Test //Configuration 用户 ...

  6. 网络编程socket基本API详解(转)

    网络编程socket基本API详解   socket socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket ...

  7. 转】Mahout推荐算法API详解

    原博文出自于: http://blog.fens.me/mahout-recommendation-api/ 感谢! Posted: Oct 21, 2013 Tags: itemCFknnMahou ...

  8. dom4j api 详解--XPath 节点详解

    dom4j api 详解 http://871421448.iteye.com/blog/1546955 XPath 节点 http://www.w3school.com.cn/xpath/xpath ...

  9. 百度地图API详解之事件机制,function“闭包”解决for循环和监听器冲突的问题:

    原文:百度地图API详解之事件机制,function"闭包"解决for循环和监听器冲突的问题: 百度地图API详解之事件机制 2011年07月26日 星期二 下午 04:06 和D ...

随机推荐

  1. 1、Linux命令随笔

    1 Linux命令总结 2 3 man ==命令帮助; 4 help ==命令的帮助(bash的内置命令); 5 ls ==list,查看目录列表; 6 -ld:查看目录权限; 7 -l:(long) ...

  2. Win10系统修改主机名、用户名称和密码、以及C盘中的用户文件夹名

    写在前面 近期重新安装了Ubuntu16.04系统,同时也修改了Windows10系统的用户名.密码,还有C盘用户文件夹名称.对于Linux和windows系统来说,修改名称基本都是三部分,主机名.用 ...

  3. Maven项目pom文件设置JDK版本

    maven项目创建之后有时候默认设定了java的低版本,每次导入项目或者更新maven的时候可能或出现一些报错,在pom.xml设定版本免除这个问题 <build> <finalNa ...

  4. CSS揭秘—灵活的背景图(三)

    前言: 所有实例均来自<CSS揭秘>,该书以平时遇到的疑难杂症为引,提供解决方法,只能说秒极了,再一次刷新了我对CSS的认知 该书只提供了关键CSS代码,虽然有在线示例代码链接,但访问速度 ...

  5. 谷歌浏览器的各个版本对应的webdriver(chromedrive)-超级详细

    简介 近来看到各个测试群里的小伙伴由于安装的谷歌浏览器版本各不相同,有高有低,这可是难住愁坏了一大批人,所以都在要各种版本的谷歌浏览器相对应的chromedrive,为此找了一个淘宝镜像网址供大家下载 ...

  6. Docker系列之入门篇

    Dcoker是什么? 概述 Docker 是世界领先的软件容器平台.开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题.运维人员利用 Docker 可以在隔离容器中并行运行 ...

  7. confd+etcd实现高可用自动发现

    Confd是什么 Confd是一个轻量级的配置管理工具. 通过查询后端存储,结合配置模板引擎,保持本地配置最新,同时具备定期探测机制,配置变更自动reload. 对应的后端存储可以是etcd,redi ...

  8. JavaScript键盘鼠标事件处理

    监听键盘鼠标事件 监听某个按键事件 当键盘上的某个键被按下时,会依次触发一次下面的事件: onkeydown: 键盘按下这个动作(按下键盘) onkeypress: 键盘被按住(一直按着键盘不动) o ...

  9. windows环境设置mysql自动备份(测试成功)

    00.背景介绍 最近做了个小程序,使用的是mysql数据库,涉及到将程序数据备份的事:虽然大部分数据库客户端工具都具有备份功能,但并不能做到定期自动备份:在Windows环境下,手工备份MySQL是很 ...

  10. DSAPI 远程协助之获取当前鼠标指针坐标及样式

    在编写远程协助类软件时,除了获取屏幕画面外,还需要获取鼠标当前的坐标以及当前的指针样式,以便让远程屏幕知道当前的操作状态. 使用DSAPI内置的鼠标指针类,可轻松获取. 代码如下: Imports D ...