一、多表单切换

在web应用中经常会遇到frame/iframe表单嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位。这时就需要通过switch_to_frame()方法将当前定位的主体切换为frame/iframe表单的内嵌页面中。

#frame.html
<html>
<head>
<link href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet"/>
<script type="text/javascript" >$(document).ready(function() {
});
</script>
</head>
<body>
<div class="row-fluid">
<div class=" span10 well">
<h3>frame</h3>
<iframe id="if" name="nf" src="http://www.baidu.com" width="800" height="300" >
</iframe>
</div>
</div>
</body>
<script
src="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.js" ></script>
</html>

在此代码中,通过iframe表单嵌入一个百度页面,用浏览器打开如下图所示

这时候直接定位页面上的百度的输入框一定会报错:找不到元素。因此可以使用switch_to.frame()先找到frame.html中的<iframe>标签,然后再定位百度输入框。

#frame.py
#coding:utf-8
from selenium import webdriver
import os,time driver=webdriver.Chrome()
file_path='file:///'+os.path.abspath('frame.html')
driver.get(file_path) #切换到iframe(id='if')
driver.switch_to_frame("if") #下面就可以正常的操作元素了
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
time.sleep(3) driver.quit()

switch_to.frame()默认可以直接取表单的id或那么属性。如果iframe没有可用的id和name属性,则可以通过下面的方式进行定位。

#frame.py
…..
#先通过xpath定位到iframe
xf=driver.find_element_by_xpath('//*[@class="if"]') #再将定位对象传给switch_to.frame()方法
driver.switch_to.frame(xf)
……
driver.switch_to.parent_frame()

如果完成了在当前表单上的操作,则可以通过switch_to.parent_content()方法跳出当前一级表单。改方法默认对应于离它最近的switch_to.frame()方法。除此之外,在进入多级表单的情况下,还可以通过switch_to.default_content()调回最外层的页面。

最新文章

  1. nginx + lua +redis环境搭建
  2. Sprint评审会议不是Sprint演示会议
  3. 关于IOS免证书真机安装的过程和问题
  4. jQuery ajax()使用serialize()提交form数据
  5. 洛谷P1736 创意吃鱼法
  6. python学习第八天 -- 迭代
  7. POJ 2352 Stars 树阵
  8. Python中的选择排序
  9. python 小白(无编程基础,无计算机基础)的开发之路,辅助知识6 python字符串/元组/列表/字典互转
  10. python 爬去拉钩测试招聘信息
  11. webloigc 控制台修改登录密码
  12. 挂载银行前置机Ukey到windows server2012虚拟机的操作记录
  13. 第11章 拾遗4:IPv6(2)_给计算机配置IPv6地址
  14. 树莓派进阶之路 (009) - 树莓派ftp脚本(原创)
  15. 转:linux下配置JDK提示tools.jar/dt.jar权限不够
  16. ES(3): ES Cluster Extended Azure Storage
  17. 2018-10-15 21:07:38 c language
  18. WPF MessageContract DataContract
  19. 1 安装企业wiki:confluence
  20. Problem D: 零起点学算法24——判断奇偶数

热门文章

  1. or/in/union与索引优化
  2. git用ssh方式下载和提交代码
  3. Adaptive Synchronization of Dynamics on Evolving Complex Networks
  4. DEC-UPDATE
  5. IANA
  6. linux下编译安装SDL2和ffmpeg
  7. CPU性能指标
  8. loj2589 「NOIP2009」Hankson 的趣味题
  9. CSS 多行省略失效 (-webkit-box-orient 失效) Second Autoprefixer control comment was ignored. Autoprefixer applies control comment to whole block, not to next rules.
  10. 使用Nginx的proxy_cache缓存功能取代Squid[原创]