多层级iframe时,selenium定位页面元素失败问题总结

昨晚在用selenium写网易相册首页(http://photo.163.com)的登录自动化代码时,发现怎么也定位不到登录框的用户名元素,如下图:


代码如下:

import java.util.concurrent.TimeUnit;

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

public class Photo1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 打开Firefox浏览器
		WebDriver driver = new FirefoxDriver();
		// 打开163相册
		driver.get("http://photo.163.com");
		
		driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
		driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@src='http://blog.163.com/newpage/ursweb/tmpl2/loginurs.html'")));
		// 找到页面元素 用户名
//		WebElement loginName = driver.findElement(By.name("email"));
		WebElement loginName = driver.findElement(By.xpath("//*[@class='j-inputtext dlemail']"));

代码执行到“找到页面元素 用户名”时,就会报错,unable to locate element,定位不到元素。

再仔细查看页面元素结构,发现在上图的iframe下,还有子iframe,如下:


改写代码,加上定位到子iframe的代码:

import java.util.concurrent.TimeUnit;

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

public class Photo2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//	打开浏览器
		WebDriver driver = new FirefoxDriver();
		// 加上等待时间
		driver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);
		//	打开163相册
		driver.get("http://photo.163.com");
		//定位到iframe
		driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@src='http://blog.163.com/newpage/ursweb/tmpl2/loginurs.html']")));
		driver.switchTo().frame(driver.findElement(By.name ("")));
		//定位到登录框
		WebElement userName = driver.findElement(By.xpath("//*[@class='j-inputtext dlemail']"));

执行后成功定位到登录框元素。


这个问题花了大概1个多小时定位,在未发现子iframe之前,多次更改iframe的格式、登录框的属性值,没有找到问题的根因,有两点心得:

1. 要switch frame时,一定要在查看页面元素时,仔细看一下有几层,嵌套的时候要多条语句定位;

2. 遇到问题时,在多次尝试无果之后,不要死扣(死扣时思维不容易跳出来,不利于发现问题),要停下来分析一下可能的原因,最好从头开始梳理流程,另外就是网上找资料,或者找人问,有些时候别人指导一下,会有“仙人指路”的效果。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值