python3.6+selenium实现操作Frame中的页面元素


Posted in Python onJuly 16, 2019

有时网页中会嵌套一个或者多个Frame,此时我们直接去找嵌套在Frame里面的元素会抛出异常,所以在操作的时候我们需要将页面焦点切换到Frame里面,下面我们就以一个实例演示一下!

首先先创建三个html文件,文件代码如下:

1)frameset.html

python3.6+selenium实现操作Frame中的页面元素

2)frame_left.html

python3.6+selenium实现操作Frame中的页面元素

3)frame_right.html

python3.6+selenium实现操作Frame中的页面元素

4)frame_middle.html

python3.6+selenium实现操作Frame中的页面元素

5)把这四个html文件放在同一个文件夹下<

以下是python实现该逻辑的代码:

import unittest
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import TimeoutException
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

class MyTestCase(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox(executable_path=‘D:\python\driver\geckodriver')
def test_HandleFrame(self):
url=“file:///D:/frame/frameset.html”
self.driver.get(url)
#使用索引方式进入指定的frame页面,索引号从0开始
#所以想进入中间的frame,需要使用索引号1
#如果没有使用此行代码,则无法找到页面中左侧frame中的任何页面元素
self.driver.switch_to.frame(0)
#找到左侧frame中的p标签元素
leftFrameText=self.driver.find_element_by_xpath("//p")
#断言左侧frame中的文字是否和“这是左侧frame页面上的文字”这几个关键字相一致
self.assertAlmostEqual(leftFrameText.text,u"这是左侧frame页面上的文字")
#找到左侧frame中的按钮元素,并单击该元素
self.driver.find_element_by_tag_name(“input”).click()
try:
#动态等待alert窗体出现
alertWindow=WebDriverWait(self.driver,10).until(EC.alert_is_present())
#打印alert消息
print(alertWindow.text)
alertWindow.accept()
except TimeoutException as e:
print(e)
#使用driver.switchTo.default_content方法,从左侧frame中返回到frameset页面
#如果不调用此行代码则无法从左侧frame页面中直接进入其他frame页面
self.driver.switch_to.default_content()
#通过标签名找到页面中所有的frame元素,然后通过索引进入该frame
self.driver.switch_to.frame(self.driver.find_elements_by_tag_name(“frame”)[1])
#断言页面源码中是否存在“这是中间frame页面上的文字”关键字串
assert u"这是中间frame页面上的文字"in self.driver.page_source
print(“这是中间的frame页面”)
#在输入框中输入“我在中间frame”
self.driver.find_element_by_tag_name(“input”).send_keys(“我在中间frame”)
self.driver.switch_to.default_content()
self.driver.switch_to.frame(self.driver.find_element_by_id(“rightframe”))
assert u"这是右侧frame页面上的文字" in self.driver.page_source
self.driver.switch_to.default_content()
print(“这是右侧的frame页面”)

if name == ‘main':
unittest.main()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中django框架通过正则搜索页面上email地址的方法
Mar 21 Python
windows 10下安装搭建django1.10.3和Apache2.4的方法
Apr 05 Python
python提取图像的名字*.jpg到txt文本的方法
May 10 Python
Python wxpython模块响应鼠标拖动事件操作示例
Aug 23 Python
对Python的zip函数妙用,旋转矩阵详解
Dec 13 Python
获取django框架orm query执行的sql语句实现方法分析
Jun 20 Python
Python操作excel的方法总结(xlrd、xlwt、openpyxl)
Sep 02 Python
Python线程指南分享
Nov 19 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
Nov 13 Python
Python从文件中读取数据的方法步骤
Nov 18 Python
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
Jun 22 Python
Python中的pprint模块
Nov 27 Python
Python Web版语音合成实例详解
Jul 16 #Python
windows下python虚拟环境virtualenv安装和使用详解
Jul 16 #Python
Pandas中DataFrame的分组/分割/合并的实现
Jul 16 #Python
Python的matplotlib绘图如何修改背景颜色的实现
Jul 16 #Python
python调用其他文件函数或类的示例
Jul 16 #Python
Python PyQt5 Pycharm 环境搭建及配置详解(图文教程)
Jul 16 #Python
用Anaconda安装本地python包的方法及路径问题(图文)
Jul 16 #Python
You might like
图象函数中的中文显示
2006/10/09 PHP
php中文字母数字验证码实现代码
2008/04/25 PHP
PHP三层结构(上) 简单三层结构
2010/07/04 PHP
php获取用户真实IP和防刷机制的实例代码
2018/11/28 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
2019/08/12 PHP
在IE下获取object(ActiveX)的Param的代码
2009/09/15 Javascript
document.forms[].submit()使用介绍
2014/02/19 Javascript
jQuery队列操作方法实例
2014/06/11 Javascript
多个checkbox被选中时如何判断是否有自己想要的
2014/09/22 Javascript
js动态创建及移除div的方法
2015/06/03 Javascript
javascript中alert()与console.log()的区别
2015/08/26 Javascript
Angular2 多级注入器详解及实例
2016/10/30 Javascript
Bootstrap Img 图片样式(推荐)
2016/12/13 Javascript
获取当前按钮或者html的ID名称实例(推荐)
2017/06/23 Javascript
详解vue渲染从后台获取的json数据
2017/07/06 Javascript
基于angular-utils-ui-breadcrumbs使用心得(分享)
2017/11/03 Javascript
element-ui table span-method(行合并)的实现代码
2018/12/20 Javascript
详解微信小程序自定义组件的实现及数据交互
2019/07/22 Javascript
js实现贪吃蛇小游戏
2019/10/29 Javascript
vue中使用elementUI组件手动上传图片功能
2019/12/13 Javascript
ES5新增数组的实现方法
2020/05/12 Javascript
[01:01:13]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第三场
2018/04/06 DOTA
[53:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第一场 1月31日
2021/03/11 DOTA
对python requests的content和text方法的区别详解
2018/10/11 Python
python3实现带多张图片、附件的邮件发送
2019/08/10 Python
Win下PyInstaller 安装和使用教程
2019/12/25 Python
Python 实现网课实时监控自动签到、打卡功能
2020/03/12 Python
Tensorflow tf.tile()的用法实例分析
2020/05/22 Python
python调用有道智云API实现文件批量翻译
2020/10/10 Python
CSS3弹性盒模型开发笔记(一)
2016/04/26 HTML / CSS
Eastbay官网:美国最大的运动鞋网络零售商
2016/07/27 全球购物
体育教学随笔感言
2014/02/24 职场文书
《寓言两则》教学反思
2014/02/27 职场文书
文明生主要事迹
2014/05/25 职场文书
会计手工模拟做账心得体会
2016/01/22 职场文书
深入理解margin塌陷和margin合并的解决方案
2021/06/26 HTML / CSS