操作Frame页面元素

  测试网址代码 

 frameset.html:

 <html>
    <head>
      <title>frameset页面</title>
    </head>
    <frameset cols="25%,50%,25%">
      <frame id="leftframe" src="frame_left.html">
      <frame id="middleframe" src="frame_middle.html">
      <frame id="rightframe" src="frame_right.html">
    </frameset>
  </html>

  frame_left.html: 

 <html>
    <head>
      <title>左侧frame</title>
    </head>
    <body>
      <p>这是左侧frame页面上的文字</p>
    </body>
  </html>

  frame_middle.html:

 <html>
    <head>
      <title>中间frame</title>
    </head>
    <body>
      <p>这是中间frame页面上的文字</p>
    </body>
  </html>

 frame_right.html:

  <html>
    <head>
      <title>右侧frame</title>
    </head>
    <body>
      <p>这是右侧frame页面上的文字</p>
    </body>
  </html>

  Java语言版本API实例 

  @Test
  public void testHandleFrame() {
    driver.manage().window().maximize();
    driver.get(url);
    //找到左边的frame
    driver.switchTo().frame("leftframe");
    WebElement leftFrameText = driver.findElement(By.xpath("//p"));
    Assert.assertEquals("这是左侧frame页面上的文字", leftFrameText.getText());
    //返回frameset上,不返回则无法进入其他frame
    driver.switchTo().defaultContent();
    driver.switchTo().frame("middleframe");
    WebElement middleFrameText = driver.findElement(By.xpath("//p"));
    Assert.assertEquals("这是中间frame页面上的文字", middleFrameText.getText());
    driver.switchTo().defaultContent();
    driver.switchTo().frame("rightframe");
    WebElement rightFrameText = driver.findElement(By.xpath("//p"));
    Assert.assertEquals("这是右侧frame页面上的文字", rightFrameText.getText());
    driver.switchTo().defaultContent();
    //可通过frame()里面填写数字进行跳转从0开始 1代表第二个frame
    driver.switchTo().frame(1);
    middleFrameText = driver.findElement(By.xpath("//p"));
    Assert.assertEquals("这是中间frame页面上的文字", middleFrameText.getText());
  }

  使用Frame中的HTML源码内容来操作Frame

  测试网址代码 

  同上一个html代码

  Java语言版本API实例 

  @Test
  public void testHandleFrameByPageSource() {
    driver.manage().window().maximize();
    driver.get(url);
    //找到页面的所有frame对象,并存储到frames容器中
    List<WebElement>frames = driver.findElements(By.tagName("frame"));
    //遍历所有包含frame的页面
    for(WebElement frame:frames){
      //进入frame页面
      driver.switchTo().frame(frame);
      //判断是否包含中间frame
      if(driver.getPageSource().contains("中间frame")){
        WebElement middleFrameText = driver.findElement(By.xpath("//p"));
        Assert.assertEquals("这是中间frame页面上的文字", middleFrameText.getText());
        break;
      }else{
        driver.switchTo().defaultContent();
      }
    }
    driver.switchTo().defaultContent();
  }

     操作iframe的页面元素

  测试网址代码 

  修改frame_left.html:

  <html>
    <head>
      <title>左侧frame</title>
    </head>
    <body>
      <p>这是左侧frame页面上的文字</p>
      <iframe src='iframe.html' style="width:200px";height:50px></iframe>
    </body>
  </html>

  在同目录下增加iframe.html

  <html>
    <head>
      <title>iframe</title>
    </head>
    <body>
      <p>这是iframe页面上的文字</p>
    </body>
  </html>

  Java语言版本API实例 

  @Test
  public void testHandleIFrame() {
    driver.manage().window().maximize();
    driver.get(url);
    //进入左边的frame
    driver.switchTo().frame("leftframe");
    //找到包含iframe的页面元素
    WebElement iframe = driver.findElement(By.tagName("iframe"));
    //进入iframe
    driver.switchTo().frame(iframe);
    WebElement p = driver.findElement(By.xpath("//p"));
    Assert.assertEquals("这是iframe页面上的文字", p.getText());
    driver.switchTo().defaultContent();
    driver.switchTo().frame("middleframe");
  }  

  操作浏览器的cookie

  测试网址

   http://www.sogou.com

  Java语言版本API实例 

  @Test
  public void f() {
    driver.manage().window().maximize();
    driver.get(url);
    Set<Cookie>cookies = driver.manage().getCookies();
    Cookie newCookie = new Cookie("cookieName","cookieValue");
    System.out.println(String.format("Domain->name->value->expiry->path"));
    for(Cookie cookie:cookies)
      System.out.println(String.format("%s-.%s->%s->%s->%s",cookie.getDomain(),cookie.getName(),cookie.getValue(),cookie.getExpiry(),cookie.getPath()));
    //通过cookie的name属性删除
    driver.manage().deleteCookieNamed("CookieName");
    //通过cookie对象
    driver.manage().deleteCookie(newCookie);
    //删除所有cookie
    driver.manage().deleteAllCookies();
    try {
      Thread.sleep(1500);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

WebDriverAPI(10)的更多相关文章

  1. 2016windows(10) wamp 最简单30分钟thrift入门使用讲解,实现php作为服务器和客户端的hello world

    2016最简单windows(10) wamp 30分钟thrift入门使用讲解,实现php作为服务器和客户端的hello world thrift是什么 最简单解释 thrift是用来帮助各个编程语 ...

  2. Neutron 理解(10):虚拟专用网(VPN)虚拟化 [How Neutron implements VPN Virtualization]

    学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...

  3. 基于MVC4+EasyUI的Web开发框架经验总结(10)--在Web界面上实现数据的导入和导出

    数据的导入导出,在很多系统里面都比较常见,这个导入导出的操作,在Winform里面比较容易实现,我曾经在之前的一篇文章<Winform开发框架之通用数据导入导出操作>介绍了在Winform ...

  4. Python的平凡之路(10)

    异步IO 数据库 队列 缓存 1.Gevent协程 定义:用户态的轻量级线程.协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下 ...

  5. varchar(10)与nvarchar(10)有什么区别

    前者是非unicode型,存储字符按1个算(内部空间存储占1字节),存储汉字的话按2个算, 就是可以存10个字符或者5个汉字 后者是unicode型,存储什么都是按1个算(内部空间存储占2字节), 就 ...

  6. Spring入门(10)-Spring JDBC

    Spring入门(10)-Spring JDBC 0. 目录 JdbcTemplate介绍 JdbcTemplate常见方法 代码示例 参考资料 1. JdbcTemplate介绍 JdbcTempl ...

  7. Unity3D项目实战笔记(10):Unity3D编译IPA的PostEvents–节约时间利器

    最近,SDK支付等接入差不多了,就从Unity3D生成IPA (企业版License), 然,需要手动执行的PostEvents竟然多大10项+, 这些我默默的承受了1周时间,每次约浪费20分钟-额外 ...

  8. PHP学习笔记 - 进阶篇(10)

    PHP学习笔记 - 进阶篇(10) 异常处理 抛出一个异常 从PHP5开始,PHP支持异常处理,异常处理是面向对象一个重要特性,PHP代码中的异常通过throw抛出,异常抛出之后,后面的代码将不会再被 ...

  9. .NET设计模式(10):装饰模式(Decorator Pattern)

      .NET设计模式(10):装饰模式(Decorator Pattern)   装饰模式(Decorator Pattern) --.NET设计模式系列之十 年月..在....对于..由于使用装饰模 ...

随机推荐

  1. 高性能 js -- 无阻塞加载脚本

    参考: <<高性能JavaScript>> Nicbolas C. Zakas 著 javascript代码的下载和执行过程会阻塞浏览器的其他进程, 比如页面的绘制, 遇到&l ...

  2. css页面组件

    页面组件 1 元素的尺寸/边框/背景 1.1 css尺寸相关属性 height 高度 min-height 最小高度 max-height 最大高度 width 宽度 min-width 最小宽度 m ...

  3. 2018.09.08 NOIP模拟eat(贪心)

    签到水题啊... 这题完全跟图论没有关系. 显然如果确定了哪些点会被选之后顺序已经不重要了.于是我们给点按权值排序贪心从大向小选. 我们要求的显然就是∑i(a[i]−(n−i))" role ...

  4. 第二章:冠词(Les articles)

    ★定冠词(Les articles définis ): 阳性单数:le(l') 阴性单数:la(l') 阴阳性复数:les ()表示前面已经提到的人或事物: ()有关的名词已被其它的成分(补语,关系 ...

  5. IntelliJ IDEA 2017版 spring-boot基础补充,原理详解

    一.Spring发展史  1.Spring1.x       版本一时代主要是通过XML文件配置bean,在java和xml中不断切换,在学习java web 初期的时候经常使用  2.Spring2 ...

  6. 如何在MAC下安装Myeclipse2015真的很虐心!!!!!!!!!!

    最近笔者换了一个新的笔记本,mac pro 因为同学说大公司的web开发都是写在Linux操作系统下的,所以我决定搞一个,但是装软件就是很困难啊!找了大量资料发现都不全,最后,终于搞好了,分享给同样虐 ...

  7. com.liuyang.exception.DaoException: java.sql.SQLException: Incorrect string

    错误是在JUnit测试的时候产生的,但是实际加入数据也会产生这样的情况,主要是数据库内部的编码方式不支持当前的编码方式导致的冲突,解决方法就是在建立数据库之前,要查看当前的数据库的编码方式,方法和更改 ...

  8. LA 3942 && UVa 1401 Remember the Word (Trie + DP)

    题意:给你一个由s个不同单词组成的字典和一个长字符串L,让你把这个长字符串分解成若干个单词连接(单词是可以重复使用的),求有多少种.(算法入门训练指南-P209) 析:我个去,一看这不是一个DP吗?刚 ...

  9. Linux创建其他用户并为之授权

    转载自:https://www.linuxidc.com/Linux/2016-11/137549.htm:加了一些补充说明 前言 笔记本安装了一个CentOS,想要让别人也可以登录访问,用自己的账号 ...

  10. FIR IP

    (1)多通道系数处理 系数的格式 (1)       每组系数的长度必须一样长: (2)多组系数依次连接即可; 添加多组系数后会,FIR IP核在生成时会多出以下几个信号 .s_axis_config ...