转自:https://www.jianshu.com/p/6e7d0359e4bb

Selenium是浏览器自动化测试的工具之一,用过的人都懂他的好,也被他坑的不要不要的。今天就聊聊Selenium的iFrame定位和切换。
对于一个页面,正常浏览的时候,看到的一个完整正常的页面,但是,看似是整体的页面的背后,其中是可能会包含iFrame。正因为此,在编写自动化测试的时候,定位元素就出问题了。

如何定位iFrame

  • 在页面区域右键,可以看到“This Frame”或者“Reload Frame”的选项,那么就可以确定这里是一个iFrame了
  • 通过查看页面的HTML代码,查找Frame标签
  • 如果你还想再简单点,那就是直接编写一个简单的测试,然后直接只用以下的代码(以ruby为例)来验证:
@driver.find_elements(:tagName => "frame").size

如何切换iFrame

其实如果确定了iFrame之后,切换的代码就很简单了(以ruby代码为例):

@driver.switch_to.frame(iFrame)

iFrame这里可以是三个类型:

  1. index,即整个页面中frame的个数的index,从0开始。比如页面中只有一个iFrame,就是0,两个这是0和1
@driver.switch_to.frame(1)
  1. Name or ID,这个无需多说,就是frame的这个name或者ID
@driver.switch_to.frame(frameName)
  1. Web Element,即通过css或者xpath等方式定位元素来进行切换
@driver.switch_to.frame(@driver.find_element(:xpath => "//iframe[contains(@id, 'frame')]"))

嵌套iFrame

很多时候,你可能还会遇到嵌套的iFrame的情况,嗯,其实情况也很好办,一直切换就好了。不过,还要记得如何切换回上层的iFrame呢?

@driver.switch_to.parentFrame

或者 切换到main frame

@driver.switch_to.defaultContent

嗯,有了以上的这些方法,基本可以跳过Selenium中的iFrame相关的坑了。预祝各位在Selenium中都可以顺利的测试起来……

Selenium踩坑记之iFrame的定位与切换的更多相关文章

  1. Spark踩坑记——从RDD看集群调度

    [TOC] 前言 在Spark的使用中,性能的调优配置过程中,查阅了很多资料,之前自己总结过两篇小博文Spark踩坑记--初试和Spark踩坑记--数据库(Hbase+Mysql),第一篇概况的归纳了 ...

  2. Vue + TypeScript + Element 搭建简洁时尚的博客网站及踩坑记

    前言 本文讲解如何在 Vue 项目中使用 TypeScript 来搭建并开发项目,并在此过程中踩过的坑 . TypeScript 具有类型系统,且是 JavaScript 的超集,TypeScript ...

  3. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  4. Spark踩坑记——数据库(Hbase+Mysql)

    [TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...

  5. 【踩坑记】从HybridApp到ReactNative

    前言 随着移动互联网的兴起,Webapp开始大行其道.大概在15年下半年的时候我接触到了HybridApp.因为当时还没毕业嘛,所以并不清楚自己未来的方向,所以就投入了HybridApp的怀抱. Hy ...

  6. Spark踩坑记——共享变量

    [TOC] 前言 Spark踩坑记--初试 Spark踩坑记--数据库(Hbase+Mysql) Spark踩坑记--Spark Streaming+kafka应用及调优 在前面总结的几篇spark踩 ...

  7. djangorestframework+vue-cli+axios,为axios添加token作为headers踩坑记

    情况是这样的,项目用的restful规范,后端用的django+djangorestframework,前端用的vue-cli框架+webpack,前端与后端交互用的axios,然后再用户登录之后,a ...

  8. HttpWebRequest 改为 HttpClient 踩坑记-请求头设置

    HttpWebRequest 改为 HttpClient 踩坑记-请求头设置 Intro 这两天改了一个项目,原来的项目是.net framework 项目,里面处理 HTTP 请求使用的是 WebR ...

  9. vue踩坑记

    vue踩坑记 易错点 语法好难啊qwq 不要把'data'写成'date' 在v-html/v-bind中使用vue变量时不需要加变量名 在非vue事件中使用vue中变量时需要加变量名 正确 < ...

随机推荐

  1. sort对二维字符数组排序

    转载:sort对二维字符数组排序

  2. 在linux上搭建SVN服务器并自动更新至WEB目录

    1.仓库放在 /var/svn/ 目录下,并且仓库名为 project 2.创建用户组user,该组下添加两个成员user1.user2,密码直接用用户名,两用户可以checkout代码和提交代码 3 ...

  3. 利用webhook实现发送通知到Slack

    概要 最近办公交流应用 Slack在各团队里大行其道,非常火热. 今天我们就来说说怎么用他的incoming-webhook来做一些同步通知. 从kintone发送通知给Slack 我们先来看看这种i ...

  4. PAT1016 × PAT1017

    本次题解是综合1016和1017两道题来讲解,原因无他,因为这两道都是模拟题,综合字符串处理.排序等考点 接手一道模拟题,一定要快速且准确地了解模拟的过程,清晰题目涉及的关键信息.比如1016要计算电 ...

  5. selenium 全天课整理(二)

    # encoding=utf-8 ''' selenium 全天 二 ''' #unittest例子 from selenium import webdriver import unittest,ti ...

  6. Kotlin属性揭秘与延迟初始化特性

    在上一次https://www.cnblogs.com/webor2006/p/11210181.html学习了Kotlin的伴生对象,这次来学习属性相关的东东. 属性揭秘: 先声明一个属性: 没啥可 ...

  7. 【Low版】HAUT - OJ - Contest1035 - 2017届新生周赛(六)题解

    问题 A: 比赛 时间限制: 2 秒 内存限制: 256 MB | 提交: 393 解决: 98提交 状态 题目描述 学校要派6名同学组成两个队(一个队3个人)去参加比赛,每个同学有一个分数,学校希望 ...

  8. destoon二次开发-签到时间函数扩展

    在api/extend.func.php文件下增加以下代码: //签到时间函数 function timetoday($time = 0, $type = 6) { if(!$time) $time ...

  9. maven 项目打包配置(build节点)

    参考博客:https://www.cnblogs.com/Binhua-Liu/p/5604841.html maven-assembly-plugin的使用 : https://www.cnblog ...

  10. “挂起”bug处理执行方案

    目的:避免bug状态改为挂起后,就无人问津,导致一直未得到解决.因而影响用户的使用与产品质量较差.