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

  1. # coding: utf-8
  2. from selenium import webdriver
    from time import sleep
  3. driver = webdriver.Firefox()
  4. driver.get("http://blog.hexun.com/")
  5. driver.find_element_by_id("read_btn").click()
  6. driver.maximize_window()
  7. sleep(3)
    driver.find_element_by_id("username").send_keys("账号")
  8. driver.find_element_by_id("password").send_keys("密码")
  9. driver.find_element_by_xpath(".//*[@id='login12']/div/div/div/div[3]/input").click()
  10. sleep(3)
    # 点击发送博客
    driver.find_element_by_xpath(".//*[@id='login12']/div/div/div[3]/a[1]").click()
  11. sleep(3)
  12. curr = driver.current_window_handle
  13. all_curr = driver.window_handles
    for i in all_curr:
       if i != curr:
  14.        driver.switch_to.window(i)
  15.        sleep(2)
  16.        driver.find_element_by_id("hxjy_blog_tit").send_keys(u"我的文章")
           driver.switch_to.frame(driver.find_element_by_xpath(".//*[@id='editorContainer']/iframe"))
  17.        sleep(2)
           driver.find_element_by_xpath("html/body").click()
  18.        driver.find_element_by_xpath("html/body").send_keys(u"童林")
  19.        driver.switch_to.default_content()
           # 页面下拉
  20.        js = "var q=document.documentElement.scrollTop=1000"
  21.        driver.execute_script(js)
  22.        driver.find_element_by_xpath(".//*[@id='hxjy_blog_label']").send_keys(u"测试")
  23.        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的定位也就是代码里黑色那句:

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

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

3、怎么跳出iframe

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

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

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

  1. 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. NPOI2.2.0.0实例详解(八)—设置EXCEL单元格【数字格式】

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. [java]BoneCP 参数详解

    BoneCP 参数详解: ======================================== 一.BoneCP配置文件格式(bonecp-config.xml):  xml versio ...

  3. AsyncCallback 异步回调委托

    js是单线程语言,单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务.如果前一个任务耗时很长,后一个任务就不得不一直等着. 如果排队是因为计算量大,CPU忙不过来,倒也算了,但是很多 ...

  4. 9.深入理解AbstractQueuedSynchronizer(AQS)

    1. AQS简介 在上一篇文章中我们对lock和AbstractQueuedSynchronizer(AQS)有了初步的认识.在同步组件的实现中,AQS是核心部分,同步组件的实现者通过使用AQS提供的 ...

  5. SPOJ-394-ACODE - Alphacode / dp

    ACODE - Alphacode #dynamic-programming Alice and Bob need to send secret messages to each other and ...

  6. HDU 4417 BIT or ST

    Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  7. linux杀毒软件clamav安装与使用

    #clamav安装与使用 ###第一步:Clamav下载http://www.clamav.net/downloads wget http://www.clamav.net/downloads/pro ...

  8. laravel5.5种的Eloquent ORM的使用:

    控制器方法: //Eloquent ORM的使用: public function orm1() { //all() /*$students=Student::all(); dd($students) ...

  9. 内存保护机制及绕过方法——通过覆盖部分地址绕过ASLR

    ASLR保护机制 ASLR简介 微软在Windows Vista.2008 server.Windows 7.Windows 8等系统的发布中, 开始将ASLR作为内置的系统保护机制运行, 将系统映像 ...

  10. jquery 动态创建 DIV

    方法一: var creatediv= function(){    var parentdiv=$('<div></div>');        //创建一个父div    ...