上一篇说了窗口的切换,本篇说说框架的切换。

  切换框架:是指切换html中的iframe标签元素或者frame标签元素,注意,并不包括frameset

  以下是常用的方法:

方法 说明
WebDriver switchTo().frame(int index) 通过索引切换到指定的框架,若框架不存在,则抛出异常 NoSuchFrameException
WebDriver switchTo().frame(String nameOrId) 通过框架的name或者id切换到指定的框架,若框架不存在,则抛出异常 NoSuchFrameException
WebDriver switchTo().frame(WebElement frameElement) 通过元素定位切换到该框架。若元素不稳定,则抛出StaleElementReferenceException,若框架不存在,则抛出NoSuchFrameException
WebDriver switchTo().parentFrame() 切换到父级框架,如果当前框架是最顶级,则不会切换。
WebDriver switchTo().defaultContent() 返回到最顶级的主文档,官方还说了一种可能,就是返回第一个框架,但我暂时未找到这个例子。

  我们在html目录中增加四个html,分别为frame.html,frame1.html,frame2.html,frameset.html,代码如下

  frame.html 

<html>
<head>
<meta >
<title></title>
</head>
<body>
<div>
主页文本框:<input type="text" id="text1" value="" />
</div>
<div>
<iframe src="frame1.html" id="frame1" name="frame1">
<p>您的浏览器不支持 iframe 标签。</p>
</iframe>
</div>
<div>
<iframe src="frame2.html" id="frame2" name="frame2">
<p>您的浏览器不支持 iframe 标签。</p>
</iframe>
</div> </body>
</html>

  frame1.html

<!DOCTYPE html>
<html>
<head>
<meta >
<title></title>
</head>
<body>
<p>frame1文本框:<input id="text1" type="text" /></p>
</body>
</html>

  frame2.html

<!DOCTYPE html>
<html>
<head>
<meta >
<title></title>
</head>
<body> <p>frame2文本框:<input id="text1" type="text" /></p>
</body>
</html>

  frameset.html

<!DOCTYPE html>
<html>
<head>
<meta>
<title>窗口切换</title>
</head>
<frameset rows="*,*" ,border="0" scrolling="no">
<frame src="frame1.html" name="frame1" />
<frame src="frame2.html" name="frame2" /> </frameset> </html>

  以上的代码都很简单,都是常见的两种框架,iframe和frameset,建立四个html后,我们的项目结构是这样的

  

  我们先来测试下iframe,下面这段代码的效果是,按次序切换到框架2,框架1,主框架,并且切换的时候,找到框架中的文本框,输入文本

  需要注意的时,每次切换完,下次切换到其他框架时,都需要先切换到最顶端的主文档,即先调用switchTo().defaultContent(),否则会抛出异常。

       //得到WebDriver
WebDriver driver=DriverHelper.CreateChromeDriver(); //为何此处刷新该页,因为发现第一次加载时,并不确定能载入iframe的内容,刷新后,基本都能载入,后面将会讲到Selenium的“等待”
driver.get("D:\\WorkSpace\\SeleniumTest\\html\\frame.html");
Thread.sleep(1000);
driver.get("D:\\WorkSpace\\SeleniumTest\\html\\frame.html");
Thread.sleep(1000); //切换到框架2,找到文本框,输入“frame2”,首次运行,焦点默认在主文档
driver.switchTo().frame(1);
WebElement textFrame2=driver.findElement(By.id("text1"));
textFrame2.sendKeys("frame2"); Thread.sleep(1000); //切换到框架1,找到文本框狂,输入“frame1”
//需要先切换到最顶端文档,否则会抛出异常,找不到该框架
driver.switchTo().defaultContent();
driver.switchTo().frame();
WebElement textFrame1=driver.findElement(By.id("text1"));
textFrame1.sendKeys("frame1"); Thread.sleep(1000); //切换回最顶端文档,找到文本框,输入“main”
driver.switchTo().defaultContent();
WebElement textMain=driver.findElement(By.id("text1"));
textMain.sendKeys("main");

  对于frameset.html,操作大同小异,大家可自行尝试,此处就不啰嗦。

   除了每次切换前,先调用switchTo().defaultContent()外,当第一次访问frame.html时,框架不一定加载成功,这个要引起我们的注意,实际上,这种情况经常出现,后面将会讲到如何避免这种情况的发生。

  最后给出本次代码执行的效果:

  

  

Selenium框架切换-----Selenium快速入门(七)的更多相关文章

  1. 实体框架(Entity Framework)快速入门--实例篇

    在上一篇 <实体框架(Entity Framework)快速入门> 中我们简单了解的EF的定义和大体的情况,我们通过一步一步的做一个简单的实际例子来让大家对EF使用有个简单印象,看操作步骤 ...

  2. Selenium with Python 002 - 快速入门

    一.简单实例演示 1.创建 python_org_search.py: #!/usr/bin/env python from selenium import webdriver from seleni ...

  3. Selenium窗口切换-----Selenium快速入门(六)

    有时候,我们打开多个窗口,进行多窗口操作,那么窗口间该如何切换呢? 切换的方法有两个,一个是通过窗口标题来验证,另一个是通过窗口特定的内容来验证,这两个方法都要求得到的标题或内容是唯一的. 用到的相关 ...

  4. Keras深度学习框架安装及快速入门

    1.下载安装Keras 如果你是安装的Anaconda组合套件,可以直接在Prompt上执行安装命令:pip install keras 注意:最下面为Successfully...表示安装成功! 2 ...

  5. uni-app跨平台框架介绍和快速入门

    前言: 首先今天主要介绍的是一个多平台的前端框架uni-app,关于多平台的前端框架网上有很多成熟的解决方案比如说Taro,React Native,Flutter等这些都是一些非常优秀的前端跨平台的 ...

  6. Quartz.NET开源作业调度框架系列(一):快速入门step by step

    Quartz.NET是一个被广泛使用的开源作业调度框架 , 由于是用C#语言创建,可方便的用于winform和asp.net应用程序中.Quartz.NET提供了巨大的灵活性但又兼具简单性.开发人员可 ...

  7. Quartz.NET开源作业调度框架系列(一):快速入门step by step-转

    Quartz.NET是一个被广泛使用的开源作业调度框架 , 由于是用C#语言创建,可方便的用于winform和asp.net应用程序中.Quartz.NET提供了巨大的灵活性但又兼具简单性.开发人员可 ...

  8. 实体框架(Entity Framework)快速入门

    实体 框架 (Entity Framework )简介 实体框架Entity Framework 是 ADO .NET 中的一组支持 开发 面向数据的软件应用程序的技术.是微软的一个ORM框架. OR ...

  9. Python中定时任务框架APScheduler的快速入门指南

    前言 大家应该都知道在编程语言中,定时任务是常用的一种调度形式,在Python中也涌现了非常多的调度模块,本文将简要介绍APScheduler的基本使用方法. 一.APScheduler介绍 APSc ...

随机推荐

  1. Windows下cpu使用的监控

    这里有一篇来自微软的文章,主要讲WPA如何使用,但是前面关于进程调度的介绍很给力,非常好的学习操作系统的材料: https://msdn.microsoft.com/en-us/library/jj6 ...

  2. TCP/IP协议 socket

    TCP/IP四层协议 TCP/IP概念 tcp/ip协议是主机接入互联网以及接入互联网的两台主机通信的标准. 数据帧概念 数据帧 |-- 包头 | |--源地址 | |--目标地址 | |--数据类型 ...

  3. Group By 和Having总结

    1.Group By 概述 “Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组 所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理. ...

  4. 内存表 FDMemTable ClientDataSet CreateDataSet 动态创建字段

    https://community.embarcadero.com/index.php/blogs/entry/firedac-in-memory-dataset-tfdmemtable Client ...

  5. 使用通配符配置action

    建立struts2wildcard项目,此实例基本仿照前面前面第7点的实例改写而成.为了使用通配符,只需要改写配置文件即可.此实例未使用通配时的配置文件如下: <action name=&quo ...

  6. 迷你MVVM框架 avalonjs 0.98发布

    在本版本中,avalon侧重于对组件开发的支持,可用控件达到12个,末来将大力投入对GRID,TREE等重型UI的开发中. 添加ms-widget绑定,废弃ms-ui绑定 为ms-include添加跨 ...

  7. Cocoa Touch(三):图形界面UIKit、Core Animation、Core Graphics

    UIKit 视图树模型 1.视图树模型 计算机图形实际上是一个视图树模型,每个视图都有一个本地坐标系.每个本地坐标系的组成部分是:原点在父坐标系中的位置,每个基在父坐标系中的位置,由此就可以根据向量的 ...

  8. PHP 将HTML转成PDF文件,HTML 转word,Word 转Html

    html转 PDF 用MPDF ,Word转Html  纯PHP的方法暂未找到Word直接转PDF的方法 可以使用 LibreOffice 6.1  (Liunx,win) 皆可使用 Html转成PD ...

  9. 面试概率极大的Oracle存储过程

    1.什么是存储过程.存储过程是数据库服务器端的一段程序,它有两种类型.一种类似于SELECT查询,用于检索数据,检索到的数据能够以数据集的形式返回给客户.另一种类似于INSERT或DELETE查询,它 ...

  10. 基于Bind实现的DNS正反向解析及主从DNS的配置

    一.什么是DNS? 1.1 简单的理解,Domain Name System,是互联网一项核心的服务,他作为一个桥梁可以将域名和IP地址相互因素的一个分布式数据库,能够使人更加方便的访问互联网,而不用 ...