如何查看是否为iframe

*使用FireFox组件firebug->firepath

1.Top Window:可直接定位

2.iframe#i:根据id定位

定位方法:

switch_to.frame(name or id or frame_element)

针对有id或name的情况

代码:

from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("http://mail.126.com/")
time.sleep(1)
#切换到iframe中,参数是它的id"x-URS-iframe"
driver.switch_to.frame("x-URS-iframe")
driver.find_element_by_name("email").send_keys("abc")
driver.find_element_by_name("password").send_keys("123")
driver.find_element_by_id("dologin").click()
time.sleep(1)
driver.quit()

3.iframe:id 或name为空

定位方法:

switch_to.frame(frame element)

代码:

#coding:utf-8
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("http://mail.126.com/")
time.sleep(1)
#iframe既没有id也没有name,把iframe当成元素对象,先定位iframe这个元素
iframe_element=driver.find_element_by_xpath('//iframe[@id='x-URS-iframe']')
driver.switch_to.frame(iframe_element)
driver.find_element_by_name("email").send_keys("abc")
driver.find_element_by_name("password").send_keys("123")
driver.find_element_by_id("dologin").click()
time.sleep(1)
driver.quit()

4.直接为空(两层iframe)

 如果元素都为空,找不到,可以通过页面上iframe的索引进行定位

定位方法:

driver.switch_to.frame(0)  #用frame的index进行定位,从0开始

*top window不算进去

代码:

#coding:utf-8
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("http://mail.126.com/")
time.sleep(1)
#什么也没有,就通过索引,取下标,从0开始计数
driver.switch_to.frame(3)
driver.find_element_by_name("email").send_keys("abc")
driver.find_element_by_name("password").send_keys("123")
driver.find_element_by_id("dologin").click()
time.sleep(1)
driver.quit()

二.多个iframe切换

一个页面上嵌套f1,f1里面又嵌套f2,这种情况又如何切换?

问题:

如何切换到f2?

分析:

想要切换到f2,首先要从top windows中先切换到f1,再从f1切换至f2(举例:想进入房间,需要先打开门,进入客厅,再从客厅进入房间同理)

方法:

#从Top Window切换到框架f1

driver.switch_to.frame('f1')

#从框架f1切换到框架f2

driver.switch_to.frame('f2')

#再从框架f2返回至框架f1(返回上一级的意思)

driver.switch_to.parent_frame()

#跳出所有iframe,返回主界面

driver.switch_to_default_content()

iframe详解的更多相关文章

  1. Web前端之iframe详解

    iframe基本内涵 通常我们使用iframe直接直接在页面嵌套iframe标签指定src就可以了. <iframe src="demo_iframe_sandbox.htm" ...

  2. 利用window.name+iframe跨域获取数据详解

    详解 前文提到用jsonp的方式来跨域获取数据,本文为大家介绍下如何利用window.name+iframe跨域获取数据. 首先我们要简单了解下window.name和iframe的相关知识.ifra ...

  3. iframe 跨域问题解决方案 利用window.name+iframe跨域获取数据详解

    详解 前文提到用jsonp的方式来跨域获取数据,本文为大家介绍下如何利用window.name+iframe跨域获取数据. 首先我们要简单了解下window.name和iframe的相关知识.ifra ...

  4. 《手把手教你》系列技巧篇(四十一)-java+ selenium自动化测试 - 处理iframe -上篇(详解教程)

    1.简介 原估计宏哥这里就不对iframe这个知识点做介绍和讲解了,因为前边的窗口切换就为这种网页处理提供了思路,另一个原因就是虽然iframe很强大,但是现在很少有网站用它了.但是还是有小伙伴或者童 ...

  5. 《手把手教你》系列技巧篇(四十二)-java+ selenium自动化测试 - 处理iframe -下篇(详解教程)

    1.简介 经过宏哥长时间的查找,终于找到了一个含有iframe的网页.所以今天这一篇的主要内容就是用这个网页的iframe,宏哥给小伙伴或者童鞋们演示一下,在处理过程中遇到的问题以及宏哥是如何解决的. ...

  6. 「JavaScript」四种跨域方式详解

    超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...

  7. HTTP 协议详解

    相关文章:HTTP 协议之压缩 当今web程序的开发技术真是百家争鸣,ASP.NET, PHP, JSP,Perl, AJAX 等等. 无论Web技术在未来如何发展,理解Web程序之间通信的基本协议相 ...

  8. 新手入门:史上最全Web端即时通讯技术原理详解

    前言 有关IM(InstantMessaging)聊天应用(如:微信,QQ).消息推送技术(如:现今移动端APP标配的消息推送模块)等即时通讯应用场景下,大多数都是桌面应用程序或者native应用较为 ...

  9. Web端即时通讯技术原理详解

    前言 有关IM(InstantMessaging)聊天应用(如:微信,QQ).消息推送技术(如:现今移动端APP标配的消息推送模块)等即时通讯应用场景下,大多数都是桌面应用程序或者native应用较为 ...

随机推荐

  1. 小二助手(react应用框架)-http访问

    浏览地址http://118.25.217.253:4000 账号test密码123   qq讨论群:836719189 要写这个系统,就需要数据来源,让我们先来看看如果通过客户端调用服务端api拿到 ...

  2. Scala快学笔记(三)

    一 ,文件操作: 1,读取行:val source=Source.fromFile("fileName","utf-8)  形成一个字符串:source.mkString ...

  3. HBase源代码分析之MemStore的flush发起时机、推断条件等详情(二)

    在<HBase源代码分析之MemStore的flush发起时机.推断条件等详情>一文中,我们具体介绍了MemStore flush的发起时机.推断条件等详情.主要是两类操作.一是会引起Me ...

  4. REDIS 内存满时删除策略

    REDIS 内存满时删除策略

  5. Vue creatElement

    1.传统template写法 <!DOCTYPE html> <html lang="zh"> <head> <meta charset= ...

  6. linux下使用tc(Traffic Control) 流量控制命令模拟网络延迟和丢包

    目录 TC案例 TC常用命令 TC安装 TC原理介绍 TC规则 TC操作原理 TC命名规则 TC单位 TC命令 TC案例 如何使用tc模拟网络延迟和丢包 修改网络延时:  sudo tc qdisc  ...

  7. linux如何手动释放linux内存

    当在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法.那么我来谈谈这个问题 ...

  8. 流水线策略 相关算法 Tomasulo算法与记分牌调度算法

    设计流水线策略时,可参考 Tomasulo算法与记分牌调度算法  (这两个是霍老师推荐的算法,自己未了解过)

  9. Atitit.软件开发的非功能性需求attilax 总结

    Atitit.软件开发的非功能性需求attilax 总结 1. 运行环境约束:用户对软件系统运行环境的要求. 1 2. 兼容性 2 3.   7.6 数据库 database (imp by ati) ...

  10. 60. Search Insert Position 【easy】

    60. Search Insert Position [easy] Given a sorted array and a target value, return the index if the t ...