一、iframe 内联框架

1.自己写个网页,仅供理解iframe演示使用,如下

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>iframeA</title>
<style type="text/css">
div {
border:2px solid red;
width: 800px;
height: 350px;
}
#iframe_a {
border:2px solid red;
width: 500px;
height: 300px;
} </style>
</head>
<body>
<div>
<br>iframeA:
<input id='input_a' type='text'>
<iframe id='iframe_a' name='iframe_a_name' class='iframe_cls' src="./iframeB.html"></iframe>
<br>
</div><br>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>iframeB</title>
<style type="text/css">
div {
width: 400px;
height: 200px;
}
#iframe_b { width: 300px;
height: 100px;
}
</style>
</head>
<body>
<div>
<br>
iframeB:
<input id='input_b' type='text'>
<iframe id='iframe_b' name='iframe_b_name' src="./iframeC.html"></iframe>
</div>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>iframeC</title>
</head>
<body>
<div>
<br>iframeC:
<input id='input_c' type='text'>
</div>
</body>
</html>

展示如下:

2.依次写入iframeA输入框,iframeB输入框,iframeC输入框代码实现

driver.navigate().to("file:///D:/xxx/test_html/iframeA.html");
driver.findElement(By.id("input_a")).sendKeys("iframe_A");
//切换iframe;将驱动对象的作用域切换至b页面
driver.switchTo().frame("iframe_a");//传入iframe_id进行切换
driver.findElement(By.id("input_b")).sendKeys("iframe_B");
WebElement element = driver.findElement(By.id("iframe_b"));
//切换iframe
driver.switchTo().frame(element);//传入iframe元素进行切换
driver.findElement(By.id("input_c")).sendKeys("iframe_C");

注意:iframe只能是按照顺序层级切换,不能从iframe_A直接切换至iframe_C

3.当你写入iframe_C的时候,返回iframe_B修改写入文本值,再返回iframe_A修改输入的文本值,代码实现;

//切换父节点:parentiframe
driver.switchTo().parentFrame();
driver.findElement(By.id("input_b")).clear();
driver.findElement(By.id("input_b")).sendKeys("C返回父节点B,修改iframe_B");
driver.switchTo().parentFrame();
driver.findElement(By.id("input_a")).clear();
driver.findElement(By.id("input_a")).sendKeys("B返回父节点A,修改iframe_A");

4.直接返回切换到顶级的父节点iframe例如:C输入后,直接切换到A文本框输入:

/**
WebDriver org.openqa.selenium.WebDriver.TargetLocator.defaultContent() Selects either the first frame on the page, or the main document when a page contains iframes.
Returns:This driver focused on the top window/first frame.
**/
driver.switchTo().defaultContent();
//直接返回切换到顶级的父节点iframe例如:C输入后,直接切换到A文本框输入:
driver.switchTo().defaultContent();
driver.findElement(By.id("input_a")).clear();
driver.findElement(By.id("input_a")).sendKeys("C直接切顶级A,再次修改iframe_A");

5.学习后总结,不足之处后续补充修正!

【java+selenium3】特殊元素iframe的定位及详解(三)的更多相关文章

  1. 《手把手教你》系列技巧篇(三十二)-java+ selenium自动化测试-select 下拉框(详解教程)

    1.简介 在实际自动化测试过程中,我们也避免不了会遇到下拉选择的测试,因此宏哥在这里直接分享和介绍一下,希望小伙伴或者童鞋们在以后工作中遇到可以有所帮助. 2.select 下拉框 2.1Select ...

  2. Java 8系列之Stream的基本语法详解

    本文转至:https://blog.csdn.net/io_field/article/details/54971761 Stream系列: Java 8系列之Stream的基本语法详解 Java 8 ...

  3. Java基础-DButils工具类(QueryRunner)详解

    Java基础-DButils工具类(QueryRunner)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC ...

  4. JAVA 注解的几大作用及使用方法详解

    JAVA 注解的几大作用及使用方法详解 (2013-01-22 15:13:04) 转载▼ 标签: java 注解 杂谈 分类: Java java 注解,从名字上看是注释,解释.但功能却不仅仅是注释 ...

  5. div+css定位position详解

    div+css定位position详解 1.div+css中的定位position 最主要的两个属性:属性 absolute(绝对定位) relative(相对定位),有他们才造就了div+css布局 ...

  6. java实现excel的导入导出(poi详解)[转]

    java实现excel的导入导出(poi详解) 博客分类: java技术 excel导出poijava  经过两天的研究,现在对excel导出有点心得了.我们使用的excel导出的jar包是poi这个 ...

  7. Java开源生鲜电商平台-盈利模式详解(源码可下载)

    Java开源生鲜电商平台-盈利模式详解(源码可下载) 该平台提供一个联合买家与卖家的一个平台.(类似淘宝购物,这里指的是食材的购买.) 平台有以下的盈利模式:(类似的平台有美菜网,食材网等) 1. 订 ...

  8. “全栈2019”Java多线程第十九章:死锁详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  9. Java基础-进程与线程之Thread类详解

    Java基础-进程与线程之Thread类详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.进程与线程的区别 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 ...

随机推荐

  1. python实现rtsp取流并截图

    import cv2 def get_img_from_camera_net(folder_path): cap = cv2.VideoCapture("rtsp://admin:admin ...

  2. P7518-[省选联考2021A/B卷]宝石【主席树,二分】

    正题 题目链接:https://www.luogu.com.cn/problem/P7518 题目大意 给出\(n\)个点的一棵树,每个点上有不大于\(m\)的数字. 然后给出一个长度为\(c\)的各 ...

  3. Pycharm新建模板默认添加作者时间等信息(逼格更高,好像很历害的样子)

    在pycharm使用过程中,关于代码编写者的一些个人信息快捷填写,使用模板的方式比较方便. 方法如下: 1.打开pycharm,选择File-Settings 2.选择Editor--Color&am ...

  4. Python3入门系列之-----字符串

    字符串 字符串是由数字,字母.下划线组成的一串字符 创建字符串,可以使用单引号和双引号: var1 = 'Hello World!'var2 = "Hello World!" 学习 ...

  5. python接口自动化--json解析神器jsonpath

    前言 做接口测试的时候,大部分情况下返回的是json数据,我们需要对返回的json断言. 当返回的数据量比较大,并且嵌套的层级很深的时候,很多小伙伴不会取值,往往在返回结果取值上浪费很多时间.一直在寻 ...

  6. bug 找不到或无法加载主类main.java.*

    开发时遇到的的一个问题,不知道是什么引起的,一个maven springboot 的项目,主类启动的时候报错,说没找到 主类,起先怀疑是springboot的问题,随手写一个单独的类,有main方法, ...

  7. 开机延时启动多程序(Dos下Start命令详解)

    前言 在实际开发当中,很多程序需要开机自启,并且对启动顺序有所要求,这里推荐一种最简单的开机延时启动多程序的方法,使用bat脚本来控制程序的启动顺序. Bat脚本实现 Bat比较简单,延时是采用pin ...

  8. .NET 排序 Array.Sort<T> 实现分析

    System.Array.Sort<T> 是.NET内置的排序方法, 灵活且高效, 大家都学过一些排序算法,比如冒泡排序,插入排序,堆排序等,不过你知道这个方法背后使用了什么排序算法吗? ...

  9. Django整理(三) - 配置文件&静态文件

    项目常用配置 在项目的 setting.py 配置文件中,进行项目相关配置的修改. 1. BASE_DIR 当前项目的根目录,Django会依此来定位工程内的相关文件,我们也可以使用该参数来构造文件路 ...

  10. HTML模板标签解析

    HTML基本模板 1 <!DOCTYPE html> 2 <html lang="zh-CN"> 3 <head> 4 <meta cha ...