关于selenium多层iframe切换,及iframe没有id和name属性的情况下进行切换的问题。(如下图:)

  问题:  

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

  2. 在切入到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+java多层级frame切换的问题的更多相关文章

  1. selenium(java)浏览器多窗口切换处理

    要在多个窗口直接切换,首先获取每个窗口的唯一标示符(句柄),通过窗口属性可以获取所有打开窗口的标示符,以集合的形式返回:以下示例:       Set<String> winHandels ...

  2. Selenium+Java(五)iframe/frame多表单处理

    前言 如果网页中使用了frame,则在使用Selenium定位元素时需要切换到对应的frame,否则会定位不到需要的元素. 切换到需要切换的frame中 driver.switchTo().frame ...

  3. 自动化测试selenium+java 第一章

    selenium元素的定位以及操作 1. 元素的定位 Selenium 自动化,我们需要做的最基本的事情就是在页面找到元素并通过脚本程 序去操作这个元素,实现模拟人工操作.我们有多种定位元素的方式可以 ...

  4. Selenium+Java自动化测试的方法

    1.设置等待时间Thread.sleep(2000); (1000代表1s)2.断言assertion:验证应用程序的状态是否同所期望的一致.常见的断言包括:验证页面内容,如标题是否为X或当前位置是否 ...

  5. maven+selenium+java+testng+jenkins自动化测试

    最近在公司搭建了一套基于maven+selenium+java+testng+jenkins的自动化测试框架,免得以后重写记录下 工程目录 pom.xml <project xmlns=&quo ...

  6. Selenium+Java(四)Selenium Xpath元素定位

    前言 关于Selenium元素定位,这是最后一篇博客. Xpath定位可以实现的功能 Selenium+Java(三)Selenium元素定位中讲的定位方式也可以实现,具体要用那种定位方式要根据自己的 ...

  7. Selenium+java自动化测试常用知识点

    一.元素的定位 1.通过ID定位元素: findElement(By.id(element)); 2.通过元素的名称定位元素: findElement(By.name(element)); 3.通过元 ...

  8. selenium自动化测试入门 定位frame和iframe中的元素对象

    < frame> <iframe> 标签,浏览器会在标签中打开一个特定的页面窗口(框架),它在本窗口中嵌套进入一个网页,当用selenium定位页面元素的时候会遇到定位不到fr ...

  9. selenium第一课(selenium+java+testNG+maven)

    selenium介绍和环境搭建 一.简单介绍 1.selenium:Selenium是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包 ...

随机推荐

  1. [EffectiveC++]item46:需要类型转换时请为模板定义非成员函数

  2. [Java多线程] LinkedBlockingQueue

    java.util.concurrent包下的新类.LinkedBlockingQueue就是其中之一,是一个阻塞的线程安全的队列,底层采用链表实现. LinkedBlockingQueue Link ...

  3. 1260. [CQOI2007]涂色【区间DP】

    Description 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字符串表示这个目标:RGBGR. 每次你可以把一段连续 ...

  4. 1305. [CQOI2009]跳舞【最大流+二分】

    Description 一次舞会有n个男孩和n个女孩.每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞.每个男孩都不会和同一个女孩跳两首(或更多)舞曲.有一些男孩女孩相互喜欢,而其他相互不喜欢(不会 ...

  5. Day7 访问权限

    构造者模式思想 进行初始化,解决了多个构造器重载,构造器参数过多记不住的情况. package day7;//声明一个程序包 class Employee{ private String name; ...

  6. ajax调用webservice 跨域问题

    用js或者jquery跨域调用接口时 对方的接口需要做jsonp处理,你的ajax jsonp调用才可以 egg 接口中已经做了jsonp处理,所以可以跨域调用 //$.ajax({ // url: ...

  7. 有关linqtosql和EF的区别

    LINQ to SQL和Entity Framework都是一种包含LINQ功能的对象关系映射技术.他们之间的本质区别在于EF对数据库架构和我们查询的类型实行了更好的解耦.使用EF,我们查询的对象不再 ...

  8. C# 生成自签名CA证书

    "; string signatureAlgorithm = "SHA1WithRSA"; // Generate RSA key pair var rsaGenerat ...

  9. 常用命令 tcl & shell

    TCL 常用命令: 1. 当前时间  [exec  date  +%m%d_%H%M]   (实际是调用shell命令 date),比如在 icc 中保存cell 时可以用:save_mw_cel   ...

  10. (转)CentOS 7 —— /etc/rc.local 开机不执行 - 解决方法

    chmod +x /etc/rc.d/rc.localsystemctl enable rc-local.service Note: rc.local is obsolete. ----------- ...