WebDriverAPI(10)

 

  操作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();
    }
  }

posted @ 2019-03-06 11:51  心生意动  阅读(94)  评论(0编辑  收藏  举报