我们在使用selenium的18中定位方式的时候,有时会遇到定位不上的问题,今天我们就来说说导致定位不上的其中一个原因---iframe

问题描述:通过firebug查询到相应元素的id或name等,但在定位此元素的时候就是报错,提示:

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element

问题原因:元素定位不到

问题分析:通过firebug可以看到,但就是定位不到,这时候很有可能是iframe搞得鬼了

########################################################################

那在解决问题之前,首先让我们了解一下iframe

IFRAME是HTML标签,作用是文档中的文档,或者浮动的框架(FRAME)。iframe元素会创建包含另外一个文档的内联框架(即行内框架)

<iframe> 标签规定一个内联框架。

一个内联框架被用来在当前 HTML 文档中嵌入另一个文档。

从以上描述就很好理解了,就比如我们在一个word文档中插入一个txt的文档,那我们如果直接访问txt里的内容,当然会访问不到

那咋办捏?

#########################################################################

frame标签有frameset、frame、iframe三种,frameset跟其他普通标签没有区别,不会影响到正常的定位,而frame与iframe对selenium定位而言是一样的,selenium有一组方法对frame进行操作。

1.  切换到frame(也就是前面比喻中的txt)

  switch_to.frame(name_or_id_or_frame_element)

  (1.切换到iframe,参数是他的id  ,2. 如果没有id,name是唯一的,参数是name 。  3.iframe既没有id,也没有name,把iframe当成元素对象,先定位iframe这个元素,然后切换

  4.还可以通过iframe的index进行定位,此方法用firepath中查看)

  举例1:

  # coding:utf-8
from selenium import webdriver
driver=webdriver.Firefox()
driver.get("http://mail.126.com")
driver.implicitly_wait(10)
driver.switch_to.frame("x-URS-iframe") #切换frame
driver.find_element_by_name("email").send_keys("abcdef")   #使用name定位
driver.find_element_by_id("password").send_keys("123456")   #使用id定位
driver.find_element_by_id("dologin").click() 

举例2:针对iframe没有id和name情况 

#本例使用find_element方式

举例3:通过页面上iframe的索引定位 

#使用index索引方式定位

定位箭头指向的这个就是第4个,索引从0开始,所以是3, driver.switch_to.frame(3)

      

2.  切换回主文档

  switch_to.default_content()

  举例(接上面的例子):driver.switch_to.default_content() #返回到主文档

3.  对于多级iframe(word里面插入excel,excel里面插入txt)

  3.1  进入多级iframe

    举例:

     #进入excel中

      driver.switch_to_frame("excel")

     #进入txt中

      driver.switch_to_frame("excel") #首先进入excel

      driver.switch_to_frame("txt")  #然后进入txt

    这个例子表面,frame需要一级一级逐级进入

  3.2  返回到主文档

    同第二节中的一样使用switch_to.default_content()

  3.3  返回上一级文档(即从txt返回到excel)

    举例:driver.switch_to.parent_frame()   #这个地方很好理解,parent翻译为(父亲或母亲),也就是返回父节点

  

  

       

  

selenium元素定位不到之iframe的更多相关文章

  1. selenium元素定位陷阱规避

    为什么selenium可以在各个浏览器上运行?因为selenium在与各个浏览器驱动执行前,会先把脚本转化成webdriver, webdriver wire协议(一种json格式的协议),这样就与脚 ...

  2. 自动化测试基础篇--Selenium元素定位

    摘自https://www.cnblogs.com/sanzangTst/p/7457111.html 一.Selenium元素定位的重要性: Web自动化测试的操作:获取UI页面的元素,对元素进行操 ...

  3. Selenium3 + Python3自动化测试系列二——selenium元素定位

    一.selenium元素定位 Selenium对网页的控制是基于各种前端元素的,在使用过程中,对于元素的定位是基础,只有准去抓取到对应元素 才能进行后续的自动化控制,我在这里将对selenium8种元 ...

  4. selenium元素定位之css选择器

    在selenium元素定位时会用到css选择器选取元素,虽说xpath在定位元素时能解决大部分问题,但使用css选择器选取元素也是一种不错的选择. css相较与xpath选择元素优点如下: 表达式更加 ...

  5. Java + selenium 元素定位(6)之iframe切换(即对富文本框的操作)

    在元素定位中,对富文本框的元素定位是特别的,当我们使用普通的元素定位方法对富文本框进行操作时,我们会发现不管我们之前介绍的八种方法中的任何方法,我们都不能成功定位到富文本框,并对其进行操作.那是因为富 ...

  6. python+selenium 元素定位--iframe

    1. 一般webdriver要操作页面元素需要在Top Window的状态下,如下: 2.当浏览器显示iframe时,用正常的元素定位是没有效果的,需要将页面装换到iframe下再对页面元素进行操作 ...

  7. selenium元素定位不到之iframe---基于python

    我们在使用selenium的18中定位方式的时候,有时会遇到定位不上的问题,今天我们就来说说导致定位不上的其中一个原因---iframe 问题描述:通过firebug查询到相应元素的id或name等, ...

  8. java+selenium元素定位和元素操作

    1.元素定位 ID定位元素: findElement(By.id(“”)); 通过元素的名称定位元素: findElement(By.name(“”)); 通过元素的html中的位置定位元素: fin ...

  9. python+selenium元素定位——8种方法

    定位元素,selenium提供了8中元素定位方法: (1)find_element_by_id() :html规定,id在html中必须是唯一的,有点类似于身份证号 (2)find_element_b ...

随机推荐

  1. JVM学习笔记三:垃圾收集器及内存管理策略

    垃圾收集器 上文说到了垃圾收集算法,这次我们聊一下HotSpot的具体垃圾收集器的实现,以JDK1.7为例,其包含的可选垃圾收集器如下图: 不同收集器之间的连线,代表它们可以搭配使用,收集器所属的区域 ...

  2. SSRF漏洞学习

    SSRF SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞.一般情况下,SSRF攻击的目标是从外网无法访问的内 ...

  3. 1059. C语言竞赛

    C 语言竞赛是浙江大学计算机学院主持的一个欢乐的竞赛.既然竞赛主旨是为了好玩,颁奖规则也就制定得很滑稽: 冠军将赢得一份"神秘大奖"(比如很巨大的一本学生研究论文集--). 排名为 ...

  4. spring mvc4使用及json 日期转换解决方案

    spring mvc使用注解方式配制,以及对rest风格的支持,真是完美致极.下面将这两天研究到的问题做个总结,供参考.1.request对象的获取方式1:在controller方法上加入reques ...

  5. strcpy.strcmp.strlen.strcat函数的实现

    #include <stdio.h> #include <string.h>   char *copy(char *a,char *b);//声明一个复制函数 char *ca ...

  6. 生成二维码的js以及调用打印插件

    插件: qrcode.js 插件下载网址:http://code.ciaoca.com/javascript/qrcode/ 用法实例: <script type="text/java ...

  7. js实时获取input数据

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. POJ-1861-NETWORK 解题报告

    Network Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 16628   Accepted: 6597   Specia ...

  9. css小随笔(二)与通用样式

    51先在学校HTML5已经有半个多月了,然后这个星期做了一个京东的手机网站,接触到了通用样式,下面以京东的手机站为例 这两个就是京东手机站了的不同的两个板块,因为HTML5仅仅只是学完了基本标签跟cs ...

  10. 【有意思的BUG】反转的水印

    今天无意中看到一个图集,翻着翻着感觉到哪儿不对劲.是的,水印打反了,怎么会出现这样的局面我也不知道,可能就是手抖了吧. 通过与懂这方面知识的人请教,120%的可能是因为图片本身就自带水印,而不是因为后 ...