selenium2+webdriver+java多层级frame切换的问题

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

简介:

selenium在多层级frame切换及iframe没有id和name属性的情况下进行切换的问题。

功能实例:

页面结构如图所示:


代码异常如下:

1. 在切入到frame:left中后,直接切换其他同级和上级frame报错

2. 在切入到frame:left中后,再切换到frame:left下面的frame:index时后无法直接定位要获取的div如上图


原因分析:

问题1:在切入到frame:left中后,要切换到与left同级的frame:index中,需先切回到初始状态defaultContent。然后再逐级向内层的frame中切换

问题2:在切入到内层的frame:index中后,发现还有一个iframe没有名称和id,需要先切换到该iframe中才能定位到需要的div

解决办法:

代码如下:

public class testFrame {

	private WebDriver driver;
	private String baseUrl;
	private WebDriverWait wait;

	@Before
	public void setUp() {
		driver = new FirefoxDriver();
		baseUrl = "http://XXXX";
		wait = new WebDriverWait(driver, 5);
		driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
	}

	@Test
	public void testFrame() throws InterruptedException {
		driver.get(baseUrl);
		wait.until(new ExpectedCondition<WebElement>() {

			@Override
			public WebElement apply(WebDriver d) {
				// TODO Auto-generated method stub
				return d.findElement(By.tagName("frame"));
			}

		});
		driver.switchTo().frame("index");
		driver.switchTo().frame("mainindex");
		driver.switchTo().frame("left");
		driver.findElement(By.xpath("//li[2]/span")).click();
		driver.findElement(By.xpath("//li[3]/span")).click();
		driver.findElement(By.xpath("//li[3]/ul/li/a/span")).click();
		driver.switchTo().defaultContent();
		driver.switchTo().frame("index");
		driver.switchTo().frame("mainindex");
		driver.switchTo().frame("index");
		driver.switchTo().frame(driver.findElement(By.tagName("iframe")));
		driver.findElement(By.xpath("/html/body/div/div"));
	}

	@After
	public void tearDown() {
		driver.quit();
	}
}


Selenium WebDriver自动化测试实例】frame定位和Robot按键! frame定位方法: (1)切入:driver.switchto().frame(String) String可以是frame的id,也可是name,frame自己挨个比对 切出:driver.switchto().defaultContent(); 跳出当前的frame2)driver.switchto().frame(0) ; 索引定位 例子: package WebDriverSuper... 阅读详情

相关推荐

SeleniumJava-WebDriver接口下的方法介绍

前言:WebDriver是继承自SearchContext,WebDriver的子接口有ImeHandler、Navigation、Options、TargetLocator、TimeOuts、Window接下来主要介绍一下WebDriver的各种方法,这些方法主要分成三种类型:控制浏览器本身、元素定位、调试。1、打开页面,get(String url);//在浏览器窗口中加载一个新页面...

yanhongyu315的博客 1252

selenium切换frame

selenium切换frame

liucaixin2016的博客 3015

Java+Selenium WebDriver实现高保真网页截图:从基础到高级实战

网页自动化测试与数据采集是现代软件开发中的常见需求,其核心原理是通过程序模拟用户操作浏览器,以获取或验证页面内容。Selenium WebDriver作为成熟的浏览器自动化框架,能够驱动真实浏览器引擎进行渲染,确保了操作结果与用户视觉体验的高度一致,具有极高的技术价值。在自动化测试报告生成、UI监控、内容归档等应用场景中,网页截图功能尤为关键。本文聚焦于利用Java结合Selenium WebDriver,深入探讨如何实现高保真、全自动的网页截图,涵盖基础视口截图、处理动态加载页面的长截图、精准元素截图以及

weixin_34025051的博客 425

selenium Webdriver自动化测试之多窗口及网页frame处理

!我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。欢迎大家点击下方名片免费领取,千万不要错过哦。

MXB1220的博客 601

基于JAVA实现的WEB端UI自动化 - WebDriver基础篇 - iframe元素定位

该文档写于 2016年在银联基于数据驱动的方式落地了新一代清分系统,当时使用的IDEA工具还是Eclipse.放出来吧...也纯当是纪念了。

易编橙 · 终身成长社群,相遇已是上上签! 1068

selenium-java切换iframe

2、当iframe中没有固定的name或者id时可以通过iframe角标进行切换,在浏览器通过ctrl+f快捷键,搜索标签框输入//iframe;来查看当前iframe是第几个来定位,代码如下。1、当iframe中有固定的name或者id时可以通过name和id进行切换,代码如下。注意:通过下标来定位时需要是同级别的,如果是frame中子级frame则不适用。

weixin_44149742的博客 933

『python爬虫』23. selenium之窗口切换与iframe(保姆级图文)

『python爬虫』23. selenium之窗口切换与iframe(保姆级图文)

MZH 3762

Selenium-Java版(frame切换/窗口切换

文章讲解了在进行Selenium自动化测试过程中,如何切换frame和新窗口,以及如何切换回主html和原窗口。

2403_85375987的博客 1390

Selenium Java(4)定位以及切换frame(iframe

很多人在用selenium定位页面元素的时候会遇到定位不到的问题,明明元素就在那儿,用firebug也可以看到,就是定位不到,这种情况很有可能是frame在搞鬼(原因之一,改天专门说说定位不到元素,可能的一些原因及处理办法)。 frame标签有frameset、frame、iframe三种,frameset跟其他普通标签没有区别,不会影响到正常的定位,而frame与iframeselenium...

cowbin2012的专栏 1万+

selenium+java多层级frame切换问题

关于selenium多层iframe切换,及iframe没有id和name属性的情况下进行切换问题。(如下图:) 问题:     1. 在切入到frame:left中后,直接切换其他同级和上级frame报错   2. 在切入到frame:left中后,再切换到它下面的frame:index时后无法直接定位要获取的div如上图   原因分析:   问题1:在切入到frame:left中后,要切换到与left同级的frame:index中,需先切回到初始状态defaultContent。然.

LINGK98的博客 457

webdriver下定位frame和alert

webdriver脚本调试中遇到问题总结分享一下,共同学习。   一.Junit中如何定位frameSeleniumIDE中录制的selectFrame、selectWindow命令在Junit中不支持,那么只能使用webdriver自带的命令,如下列: 1.定位到一个frame driver.switchTo().frame("menuFrame"); 2.从一个frame

Summary 5405

WebDriver API之iframeframe页面嵌套操作

在一个页面中可以嵌套另外一个页面,如frame/iframe技术,这是现在很多web应用中使用的一种方式,webdriver对象只能在一个页面(外层是默认的)中定位元素,需要一种方式将driver对象从外层切换给内层使用才能对内层的对象进行处理。 下图是qq邮箱登录页面,其中的登录框就是一个内嵌的frame页面,下面我们就以他为案例。 webdriver中提供的对iframe/frame操作API常用到有: driver.switch_to.frame() driver.switch_to.default_

weixin_47068446的博客 2664

Selenium + Webdriver 学习(五) frame下元素定位

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

Annie的专栏 5629

Selenium用法详解【窗口表单切换】【JAVA爬虫】

本文主要讲解java 代码利用Selenium如何实现控制浏览器进行窗口切换和页面内的不同表单之间的切换操作。

洛阳泰山的博客 1984

Selenium自动化测试技巧:掌握frame和iframe的定位与切换

通过上述步骤,我们可以有效地处理frames和iframes,无论是定位、切换还是与其中的元素交互。掌握这些技能对于自动化测试工程师来说至关重要,因为它们确保了测试用例能够覆盖所有页面元素,无论它们是否位于frame或iframe中。在编写自动化测试脚本时,确保理解了frames和iframes的工作机制,以及如何正确地切换上下文,这可以避免许多常见的错误和问题。实践是最好的学习方式,因此不断尝试和改进你的frame和iframe处理策略,将帮助你成为一个更加熟练的Selenium自动化测试工程师。

AI 爪客,专注 AI 智能体与 Skill 研发落地,斩获腾讯云、讯飞、小米等多场 AI 赛事奖项,分享 Agent 实战干货与工程化经验。 606

(转载)selenium webdriver frame操作,跳进跳出

#coding:utf-8 from selenium import webdriver import time url=‘http://’ browser = webdriver.Chrome() browser.get(url) browser.maximize_window() name=browser.find_element_by_name(‘username’) name.send_k...

白妞学代码 717

3-Selenium WebDriver脚本Java代码示例

Selenium元素定位;Get命令获取关于页面/元素的各种重要信息;导航(跳转)命令-Navigate command;关闭和退出浏览器窗口;切换内嵌框架Frame切换到弹出框。

软测小生 1246

python3 selenium自动化 frame表单嵌套的切换

在web自动化测试中,测试工程师经常会碰到frame表单嵌套结构,直接定位会报错,我们需要切换表单后才能成功定位。 我拿QQ邮箱登录来作为例子说下frame怎么切换。 qq邮箱页面按F12可以看到以下信息: 表单的信息如下: &lt;iframe id="login_frame" name="login_frame" height="100%" scrolling="no" width="1...

xiezhiming1234的博客 4241
上一篇: selenium2+webdriver+java利用firepath定位隐藏div中的问题
qabin
博客等级 码龄11年 2粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值