我们来看一段最早的代码:

# coding: utf-8

from selenium import webdriver
from time import sleep driver = webdriver.Firefox()
driver.get("http://blog.hexun.com/")
driver.find_element_by_id("read_btn").click()
driver.maximize_window()
sleep(3)
driver.find_element_by_id("username").send_keys("账号")
driver.find_element_by_id("password").send_keys("密码")
driver.find_element_by_xpath(".//*[@id='login12']/div/div/div/div[3]/input").click()
sleep(3)
# 点击发送博客
driver.find_element_by_xpath(".//*[@id='login12']/div/div/div[3]/a[1]").click()
sleep(3)
curr = driver.current_window_handle
all_curr = driver.window_handles
for i in all_curr:
   if i != curr:
       driver.switch_to.window(i)
       sleep(2)
       driver.find_element_by_id("hxjy_blog_tit").send_keys(u"我的文章")
       driver.switch_to.frame(driver.find_element_by_xpath(".//*[@id='editorContainer']/iframe"))
       sleep(2)
       driver.find_element_by_xpath("html/body").click()
       driver.find_element_by_xpath("html/body").send_keys(u"童林")
       driver.switch_to.default_content()
       # 页面下拉
       js = "var q=document.documentElement.scrollTop=1000"
       driver.execute_script(js)
       driver.find_element_by_xpath(".//*[@id='hxjy_blog_label']").send_keys(u"测试")
       driver.find_element_by_xpath(".//*[@id='postarticle']").click()
       

这是我第一篇讲selenium时发给大家看的代码,现在我就就拿这段代码举例子:

1、如何辨别是不是iframe

我们用箭头所指工具点击要查看的元素后,在FirePath选项卡下,方框所示的位置会有"iframe.editor"或者"iframe"的提示,这时候我们就可以确定——这是一个iframe。

2、定位iframe

这个我觉得有点麻烦,不知道各位大神怎么定位,我说一下我的思路,大家可以参考。由于一点编辑框就进入iframe,导致我不知道怎么定位这个iframe的位置,于是我选择定位这个iframe上面的元素,也就是定位下图方框那里,然后看下面的元素,点开div标签,在里面找iframe,方便的是鼠标移动到标签上时页面会有显示对应的位置:

上图我们看到了iframe,然后把鼠标放到iframe上,右键选择copy xpath:

这样我们就定位到了iframe的位置。

定位到了以后,我们要转移到iframe上,pycharm里提示的方法是switch_to_frame(),但是这个方法已经过时了,如果你用这个方法,pycharm会划线提醒你,最新的方法是switch_to.frame(),传的参数就是iframe的定位也就是代码里黑色那句:

driver.switch_to.frame(driver.find_element_by_xpath(".//*[@id='editorContainer']/iframe"))

现在我们进入了iframe,接下来正常进行定位、输入内容就可以了(看代码)

3、怎么跳出iframe

进入了iframe以后就像进入了一个盒子,盒子里面的东西可以找到,可是盒子外面的东西是找不到的。所以当我们操作完成,继续定位发现下图方框处变成Top Window时,证明这已经不是iframe,我们需要跳出盒子了

一句话就能跳出来,就像有的人和你说“我已经放下了”就离开你一样,哈哈,你也可以这么潇洒的对不爱你的人说。

也是一句话,就是最上面代码中的黑色斜体字:

driver.switch_to.default_content()

这样就跳出iframe了。好多登录框、文章输入框都是iframe写的,现在对你来说应该已经不难了,大家快试试吧~~

遇到问题可以留言哦~

微信公众号搜索“自动化测试实战”或扫描下方二维码添加关注~~~

《selenium2 python 自动化测试实战》(8)——定位iframe的更多相关文章

  1. 船长带你看书——《selenium2 python 自动化测试实战》(1)

    有很多selenium的教程,你没有从头看,当你看的时候已经很难跟上作者的节奏了.现在,你有机会再从头学一次了.从今天开始,船长会从最基本的知识开始,和大家一起学selenium.能不能跟着一起就看大 ...

  2. selenium2 python自动化测试实战(回归测试)

    selenium2 python自动化测试实战 最近接手商城的项目,针对后台测试,功能比较简单,但是流程比较繁多,涉及到前后台的交叉测试.在对整个项目进行第一轮测试完成之后,考虑以后回归测试任务比较重 ...

  3. 《selenium2 python 自动化测试实战》(7)——定位一组对象

    定位一组对象 定位一组对象——find_elements_by_...(),注意,这里是elements,复数.返回的结果是一个列表,我们取值的时候就要用列表取值的方式来获得自己想要的元素.需要注意的 ...

  4. Selenium2+Python自动化测试实战

    本人在网上查找了很多做自动化的教程和实例,偶然的一个机会接触到了selenium,觉得非常好用.后来就在网上查阅各种selenium的教程,但是网上的东西真的是太多了,以至于很多东西参考完后无法系统的 ...

  5. 船长带你看书——《selenium2 python 自动化测试实战》(2)浏览器操作

    浏览器操作 # coding: utf-8 from selenium import webdriver from time import sleep driver = webdriver.Firef ...

  6. 《selenium2 python 自动化测试实战》(20)——Selenium工具介绍

    (一)Selenium IDE Firefox的一个插件,有助于我们理解测试框架.在附加组件里搜索下载,一般搜的结果里前几个都不是,得点那个查看更多才行,找到这个: 安装以后浏览器工具栏会有: 安装好 ...

  7. 《selenium2 python 自动化测试实战》(19)——webdriver错误截图

    webdriver 提供错误截图函数 get_screenshot_as_file(),可以帮助我们跟踪 bug,在脚本无法继续执行时候, get_screenshot_as_file()函数将截取当 ...

  8. 《selenium2 python 自动化测试实战》(15)——调用js控制滚动条等操作

    看代码: # coding=utf-8 from time import sleepfrom selenium import webdriver driver = webdriver.Firefox( ...

  9. 《selenium2 python 自动化测试实战》(17)——几个cookies操作

    之前我们已经学过利用cookies跳过验证码登录了,那时候我们用的方法是add_cookie()方法,这里再给大家介绍两个,一般情况下我们用不到,了解一下就可以,而且如果真的用到的时候百度也很快的: ...

随机推荐

  1. 简化Kubernetes应用部署工具-Helm

    [编者的话]微服务和容器化给复杂应用部署与管理带来了极大的挑战.Helm是目前Kubernetes服务编排领域的唯一开源子项目,做为Kubernetes应用的一个包管理工具,可理解为Kubernete ...

  2. 【转】学习Python的19个资源

    原文链接:[译]学习Python编程的19个资源 用Python编写代码一点都不难,事实上它一直被赞誉为最容易学的编程语言.如果你准备学习web开发, Python是一个不错的开始,甚至想做游戏的话, ...

  3. IntelliJ IDEA 返回上次编辑(鼠标停留)的地方

    idea默认的是 : Ctrl + Alt + 左箭头,与笔记本的 旋转屏幕冲突: 找到: 我更改成了: Ctrl + CapsLock :暂时没发现冲突.

  4. raid write back / write throught

    RAID write back指的是raid控制器能够将写入的数据写入自己的缓存中,并把它们安排到后续再执行,这样做的好处就是不需要等实际写入磁盘再返回,因此写入更快.对于数据库而言,这一点更为重要, ...

  5. HDU 4825 Trie树 异或树!

    Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others)Total S ...

  6. 【转】ext4+delalloc造成单次写延迟增加的分析

    转自 http://blog.tao.ma/?p=58 这篇文章是淘宝内核组的刘峥同学在内部技术论坛上发表的一篇文章,但是由于刘峥同学目前没有blog,征得本人同意,贴在我的blog上,如果大家喜欢, ...

  7. css3 transform matrix矩阵的使用

      Transform 执行顺序问题 — 后写先执行 matrix(a,b,c,d,e,f) 矩阵函数 •通过矩阵实现缩放 x轴缩放 a=x*a    c=x*c     e=x*e; y轴缩放 b= ...

  8. vue-router防跳墙控制

    vue-router防跳墙控制 因为在实际开发中,从自己的角度来看,发现可以通过地址栏输入地址,便可以进入本没有权限的网页.而我们一般只是操作登录页面,其他页面很少考虑,此刻特来尝试解决一下 基于vu ...

  9. js排序算法04——归并排序

    归并排序是一种分治算法.思想是把原数组切分成较小的数组,直到每个小数组只有一个位置,再将小数组归并成较大的数组,直到最后有一个完整有序的大数组. js实现如下: function mergeSort( ...

  10. C++复习13.虚析构函数知识

    C++ 虚析构函数 20131010 在C++中的虚函数作用是实现基于继承机制的多态,但是我们好像忽略了一种情况,就是虚析构函数.在C++继承机制中,虽然构造函数是不可以使用虚函数声明,但是析构函数是 ...