前言

有很多小伙伴在拿163作为登录案例的时候,发现不管怎么定位都无法定位到,到底是什么鬼呢,本篇详细介绍iframe相关的切换

http://mail.163.com/登录页面10为案例,详细介绍switch_to_frame使用方法.

一、frame和iframe区别

Frame与Iframe两者可以实现的功能基本相同,不过Iframe比Frame具有更多的灵活性。 frame是整个页面的框架,iframe是内嵌的网页元素,也可以说是内嵌的框架

Iframe标记又叫浮动帧标记,可以用它将一个HTML文档嵌入在一个HTML中显示。它和Frame标记的最大区别是在网页中嵌入
的<Iframe></Iframe>所包含的内容与整个页面是一个整体,而<Frame><
/Frame>所包含的内容是一个独立的个体,是可以独立显示的。另外,应用Iframe还可以在同一个页面中多次显示同一内容,而不必重复这段内
容的代码。

二、163登录界面

1.打开http://mail.163.com/登录页面10

2.用firebug定位登录框

3.鼠标停留在左下角(定位到iframe位置)时,右上角整个登录框显示灰色,说明iframe区域是整个登录框区域

4.左下角箭头位置显示iframe属性<iframe id="x-URS-iframe" frameborder="0" name=""

三、切换iframe

1.由于登录按钮是在iframe上,所以第一步需要把定位器切换到iframe上

2.用switch_to_frame方法切换,此处有id属性,可以直接用id定位切换

四、如果iframe没有id怎么办?

1.这里iframe的切换是默认支持id和name的方法的,当然实际情况中会遇到没有id属性和name属性为空的情况,这时候就需要先定位iframe

2.定位元素还是之前的八种方法同样适用,这里我可以通过tag先定位到,也能达到同样效果

五、释放iframe

1.当iframe上的操作完后,想重新回到主页面上操作元素,这时候,就可以用switch_to_default_content()方法返回到主页面

六、如何判断元素是否在iframe上?

1.定位到元素后,切换到firepath界面

2.看firebug工具左上角,如果显示Top Window说明没有iframe

3.如果显示iframe#xxx这样的,说明在iframe上,#后面就是它的id

七、如何解决switch_to_frame上的横线呢?

1.先找到官放的文档介绍

2.官方已经不推荐上面的写法了,用这个写法就好了driver.switch_to.frame()

八、参考代码如下

 # coding:utf-8

 from selenium import webdriver

 driver = webdriver.Firefox()

 driver.get("http://mail.163.com/")

 driver.implicitly_wait(30)

 # 切换iframe

 # iframe = driver.find_element_by_tag_name("iframe")

 # driver.switch_to_frame(iframe)

 # driver.switch_to_frame("x-URS-iframe")

 driver.switch_to.frame("x-URS-iframe")

 driver.find_element_by_name("email").send_keys("")

 driver.find_element_by_name("password").send_keys("")

 # 释放iframe,重新回到主页面上

 driver.switch_to.default_content()

自动化测试-10.selenium的iframe与Frame的更多相关文章

  1. Selenium定位iframe动态ID

    Selenium定位iframe动态ID. 126邮箱实例 买了本虫师的书来学习selenium2自动化测试,然后写第一个实例就遇到了一些坑,好在有热心的网友提供了帮助,解决了问题 要学习seleni ...

  2. Python3.x:selenium获取iframe内嵌页面的源码

    Python3.x:selenium获取iframe内嵌页面的源码 前言 在一些网页中经常会看到ifrmae/frame标签,iframe是嵌入式框架一般用来在已有的页面中嵌入另一个页面,当一个元素在 ...

  3. python selenium中iframe切换、window切换方法

    一.selenium中iframe切换方法: 方法一:switch_to.frame frame函数中提供了三种定位方法:by index, name, or webelement. driver.s ...

  4. Selenium 与自动化测试 —— 《Selenium 2 自动化测试实战》读书笔记

    背景 最近在弄 appium,然后顺便发现了 Selenium 框架和这本书,恰好这本书也介绍了一些软件测试&自动化测试的理论知识,遂拿过来学习学习.所以本文几乎没有实践内容,大多都是概念和工 ...

  5. 使用iframe的优缺点,为什么少用iframe以及iframe和frame的区别。

    注:HTML5不再支持使用frame,iframe只有src 属性一.使用iframe的优缺点优点:1.程序调入静态页面比较方便;2.页面和程序分离;缺点:1.iframe有不好之处:样式/脚本需要额 ...

  6. html/css基础篇——iframe和frame的区别【转】

    转自共享圈的使用iframe的优缺点,为什么少用iframe以及iframe和frame的区别.其中本人不认同的地方有做小修改 注:HTML5不再支持使用frame,iframe只有src 属性 一. ...

  7. selenium 处理iframe

    这篇关于iframe的文章不错 http://assertselenium.com/2013/02/22/handling-iframes-using-webdriver/ selenium处理ifr ...

  8. 篇5 python自动化测试应用-Selenium环境篇

    篇5                            python自动化测试应用-Selenium环境篇 --lamecho 1.1概要 大家好!我是lamecho(辣么丑),从本篇开始我将开始 ...

  9. selenium+java多层级frame切换的问题

    关于selenium多层iframe切换,及iframe没有id和name属性的情况下进行切换的问题.(如下图:) 问题: 1. 在切入到frame:left中后,直接切换其他同级和上级frame报错 ...

随机推荐

  1. js生成的cookie在yii2中获取不到的解决办法

    在js中创建的cookie,默认用yii2中自带的方法Yii::$app->request->cookies->get('abc')获取不到,而用$_COOKIE['abc']又是能 ...

  2. Reading Lines from File in C++

    Reading Lines from File in C++ In C++, istringstream has been used to read lines from a file. code: ...

  3. es安装elasticsearch-sql插件

    根据现有ES版本,安装对应版本的插件 [es@hxl ~]$ cd elasticsearch[es@hxl elasticsearch]$ ./bin/elasticsearch-plugin in ...

  4. 分类统计的controller和service

    SpringMVC框架下的 部分代码: Controller控制器: @Resource ReviewTitleService reviewTitleService;//调用ReviewTitleSe ...

  5. 王之泰201771010131《面向对象程序设计(java)》第十周学习总结

    第一部分:理论知识学习部分 第八章  泛型程序设计 1.泛型程序设计概念 1)JDK 5.0 中增加的泛型类型,是Java 语言中类型安全的一次重要改进. 2)泛型:也称参数化类型(parameter ...

  6. Python3 tkinter基础 Radiobutton indicatoron 改变按钮的外观 圆形/方形

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  7. P4248 [AHOI2013]差异

    思路 SAM 后缀自动机parent树的LCA就是两个子串的最长公共后缀 现在要求LCP 所以把字符串反转一下 然后每个点的贡献就是endpos的大小,dfs一遍求出贡献就可以了 代码 #includ ...

  8. Learning-Python【29】:网络编程之粘包

    粘包问题 上一篇博客遗留了一个问题,在接收的最大字节数设置为 1024 时,当接收的结果大于1024,再执行下一条命令时还是会返回上一条命令未执行完成的结果.这就是粘包问题. 因为TCP协议又叫流式协 ...

  9. [转载]Linux 16进制查看命令、工具

    转自:https://blog.csdn.net/chenglian_999/article/details/4672177 2009年10月14日 21:45:00 chenglian_999 阅读 ...

  10. 【HNOI 2018】道路

    Problem Description \(W\) 国的交通呈一棵树的形状.\(W\) 国一共有\(n - 1\)个城市和\(n\)个乡村,其中城市从\(1\)到\(n - 1\) 编号,乡村从\(1 ...