`
aerchi
  • 浏览: 426068 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
文章分类
社区版块
存档分类
最新评论

selenium webdriver学习(5)-iframe的处理

 
阅读更多
selenium webdriver学习(五)------------iframe的处理

有时候我们在定位一个页面元素的时候发现一直定位不了,反复检查自己写的定位器没有任何问题,代码也没有任何问题。这时你就要看一下这个页面元素是否在一个iframe中,这可能就是找不到的原因之一。如果你在一个default content中查找一个在iframe中的元素,那肯定是找不到的。反之你在一个iframe中查找另一个iframe元素或default content中的元素,那必然也定位不到。

selenium webdriver中提供了进入一个iframe的方法:

WebDriver org.openqa.selenium.WebDriver.TargetLocator.frame(String nameOrId)

也提供了一个返回default content的方法:

WebDriver org.openqa.selenium.WebDriver.TargetLocator.defaultContent()

这样使我们面对iframe时可以轻松应对。

以下面的html代码为例,我们看一下处现iframe。

main.html

<html>
    <head>
        <title>FrameTest</title>
    </head>
    <body>
	<div id = "id1">this is a div!</div>
        <iframe id = "frame"  frameborder="0" scrolling="no" style="left:0;position:absolute;" src = "frame.html"></iframe>
    </body>
</html>



frame.html

<html>
    <head>
        <title>this is a frame!</title>
    </head>
    <body>
	<div id = "div1">this is a div,too!</div>
	<label>input:</label>
	<input id = "input1"></input>
    </body>
</html>

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class FameStudy {

	
	public static void main(String[] args) {
		WebDriver dr = new FirefoxDriver();
		String url = "\\Your\\Path\\to\\main.html";
		dr.get(url);

		//在default content定位id="id1"的div
		dr.findElement(By.id("id1"));
		
		//此时,没有进入到id="frame"的frame中时,以下两句会报错
		dr.findElement(By.id("div1"));//报错
		dr.findElement(By.id("input1"));//报错
		
		//进入id="frame"的frame中,定位id="div1"的div和id="input1"的输入框。
		dr.switchTo().frame("frame");	
		dr.findElement(By.id("div1"));
		dr.findElement(By.id("input1"));
		
		//此时,没有跳出frame,如果定位default content中的元素也会报错。
		dr.findElement(By.id("id1"));//报错
		
		//跳出frame,进入default content;重新定位id="id1"的div
		dr.switchTo().defaultContent();
		dr.findElement(By.id("id1"));
	}

}

switch_to方法会new1个TargetLocator对象,使用该对象的frame方法可以将当前识别的”主体”移动到需要定位的frame上去。

分享到:
评论

相关推荐

    selenium webdriver 学习

    1.5 selenium webdriver学习(五)------------iframe的处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 1.6 selenium webdriver学习(六)------------如何得到弹出窗口 . . . . . . . ....

    webdriver-学习

    1.安装selenium webdriver(eclipse+jdk+testng+selenium webdriver2.20+firefox 10) 2.配置testng B 对浏览器的简单操作 1.打开一个测试浏览器 2.打开1个具体的url 3.如何关闭浏览器 4.如何返回当前页面的url和...

    Python爬虫之Selenium中frame/iframe表单嵌套页面

    在Web应用中经常会遇到frame/iframe表单嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位。这时就需要通过switch_to.frame()方法将当前定位的主体...

    python selenium登录豆瓣网过程解析

    登录流程: 实例化一个driver,然后driver.get()发送请求 最重要的:切换iframe子框架,因为豆瓣的...from selenium import webdriver # 实例化driver driver = webdriver.Chrome() driver.get('https://www.douba

    selenium 与 chrome 进行qq登录并发邮件操作实例详解

    qq邮箱各种iframe需要切换,延时是必须的,通过各种方法找元素,qq邮件正文的iframe name是变化的,其他几种方法都不行,最后居然用这样搞定。o[0].click() , o[0].send_keys(“abc”),还得再研究研究!!! 备注...

    selenium+python实现自动登陆QQ邮箱并发送邮件功能

    from selenium import webdriver import time zhengyi = webdriver.Chrome() zhengyi.get('https://mail.qq.com/') 这一步没有遇到问题,至于为什么导入时间库,后面会说。 元素定位,输入QQ账号和QQ密码 手动...

    详解python selenium 爬取网易云音乐歌单名

    目标网站: 首先获取第一页的数据,这里关键要...from selenium import webdriver import time # 创建浏览器对象 window = webdriver.Chrome('./chromedriver') window.get(url) time.sleep(1) # 切换到iframe窗口

    python+selenium实现163邮箱自动登陆的方法

    本文介绍了 让我们先来预览一下代码运行效果吧: ... 1、定位到登陆框(注意登录框是一个iframe,如果不定位到iframe的话是无法找到之后的邮箱地址框和密码输入框的) ...from selenium import webdriver import t

    python selenium实现发送带附件的邮件代码实例

    这篇文章主要介绍了python selenium实现发送带附件的邮件代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 163邮件登录首页 登录成功断言是否有退出按钮...

    Python+selenium实现自动循环扔QQ邮箱漂流瓶

    from selenium import webdriver from time import sleep from random import randint def auto_throw(): 扔瓶子 driver = webdriver.Chrome() driver.get(https://mail.qq.com) sleep(2) # 切换iframe表单 ...

    chromedriver for linux 2.38

    selenium chrome driver 2.38 Supports Chrome v65-67 Changes include: Fixed Chromedriver crash/lose connection when navigate to gmail Fixed unknown session ID and cannot determine loading status ...

    Python获取当前页面内所有链接的四种方法对比分析

    本文实例讲述了Python获取当前页面内...from selenium import webdriver url = 'http://www.testweb.com' r = requests.get(url) r.encoding = 'gb2312' # 利用 re (太黄太暴力!) matchs = re.findall(r(?&lt;=href=

Global site tag (gtag.js) - Google Analytics