第4章 Selenium2-java WebDriver API (二)

4.8  定位一组元素

 定位一组元素的方法与定位单个元素的方法类似,唯一的区别是在单词element后面多了一个s表示复数。定位一组元素一般用于以下场景:

·批量操作元素,例如勾选页面上所有的复选框。

·先获取一组元素,再从这组对象中过滤出需要操作的元素。例如定位出页面上所有的checkbox,然后选择其中的一个进行操作。

eg:

编写一个html页面。

<html>
 <head>
 <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
   <title>checkbox</title>
   <link href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.main.css" rel="stylesheet"/>
   <script src="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.main.js"></script>
   <style>
      .well{
        width:200px;
        height:300px;
        margin:40 auto;
        border:1px solid red;
      }
      .control-group{
        margin-top:30px;
      }
      .controls{
       margin-left:100px;
       margin-top:-15px;
      }
   </style>

  </head>
 <body>

  <div class="well">
  <h3>checkbox</h3>
   <form class="form-horizontal">
    <div class="control-group">
     <label class="control-label" for="c1">checkbox1</label>
     <div class="controls">
      <input type="checkbox" id="c1"/>
     </div>
     </div>

     <div class="control-group">
     <label class="control-label" for="c2">checkbox1</label>
     <div class="controls">
      <input type="checkbox" id="c2"/>
     </div>
     </div>

     <div class="control-group">
     <label class="control-label" for="c3">checkbox1</label>
     <div class="controls">
      <input type="checkbox" id="c3"/>
     </div>
     </div>
   </form>
  </div>
 </body>
</html>

java代码;

package com.cy.selenium;

import java.io.File;
import java.util.List;

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

public class Test03 {
    public static void main(String[] args) throws InterruptedException {
        System.out.println("start");
        WebDriver driver = new FirefoxDriver();
        File file = new File("C:/Users/Administrator/Desktop/test.html");
        String filePath = file.getAbsolutePath();
        driver.get(filePath);
        // 通过css查找一组元素
        List<WebElement> inputs = driver.findElements(By.cssSelector("input[type=checkbox]"));
        for (WebElement checkbox : inputs) {
            checkbox.click();
        }
        Thread.sleep(3000);
        // 刷新
        driver.navigate().refresh();

        // 选择最后一个checkbox  通过xpath查找一组元素
        List<WebElement> checkboxs = driver.findElements(By.xpath(".//input[@type='checkbox']"));
        checkboxs.get(checkboxs.size()-1).click();
        Thread.sleep(2000);
        driver.close();

    }
}

效果:

 

4.9  多表单切换

 

<html>
 <head>
 </head>
 <body>
  <div class="row_fluid">
   <div class="span10 well">
    <h3>frame</h3>
    <iframe id="if" name="nf" src="http://www.baidu.com" width="1200px" height="300px"></iframe>
   </div>
  </div>
 </body>
</html>

 

java代码:

package com.cy.selenium;

import java.io.File;

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

public class Iframe {

    public static void main(String[] args) throws InterruptedException {
        System.out.println("start");
        WebDriver driver = new FirefoxDriver();
        File file = new File("C:/Users/Administrator/Desktop/frame.html");
        String filePath = file.getAbsolutePath();
        driver.get(filePath);

        // 切换到iframe (id="if")
        driver.switchTo().frame("if");
        driver.findElement(By.id("kw")).sendKeys("webDrive");
        driver.findElement(By.id("su")).click();
        Thread.sleep(4000);
        driver.close();
        //退回上一级表单
    //    driver.switchTo().defaultContent();

    }

}

 

4.10  多窗口切换

 

4.11  警告框处理

 在WebDriver中处理JavaScript所生成的alert、confirm以及prompt十分简单,具体做法是使用 switch_to_alert()方法定位到 alert/confirm/prompt,然后使用text/accept/dismiss/ sendKeys等方法进行操作。

·getText():返回 alert/confirm/prompt 中的文字信息。

·accept(): 接受现有警告框。
·dismiss():解散现有警告框。
·sendKeys(keysToSend):    发送文本至警告框。keysToSend:将文本发送至警告框。

eg:

package com.cy.selenium;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;

public class Alert {
  public static void main(String[] args) throws InterruptedException {
      System.out.println("start selenium");
        WebDriver driver=new FirefoxDriver();// 用WebDriver new Firefox浏览器的驱动给变量driver,相当于driver拿到了Firefox浏览器的控制权。
        driver.get("http://www.baidu.com/");
        Actions action=new Actions(driver);
        // 悬停在设置上
        action.clickAndHold(driver.findElement(By.linkText("设置"))).perform();
        // 打开搜索设置
        driver.findElement(By.className("setpref")).click();
        Thread.sleep(3000);
        //保存设置
        driver.findElement(By.className("prefpanelgo")).click();
        Thread.sleep(2000);
        // 接受弹框
        driver.switchTo().alert().accept();

        Thread.sleep(2000);

        driver.close();

}
}

 

时间: 2024-10-03 09:26:30

第4章 Selenium2-java WebDriver API (二)的相关文章

第4章&amp;#160;Selenium2-java WebDriver API (一)

4.1  从定位元素开始 WebDriver提供了八种元素定位方:   在Java语言中对应的定位方法: ·id findElement(By.id())        ·name findElement(By.name())·class name findElement(By.className())·tag name findElement(By.tagName())·link text  findElement(By.linkText())·partial link text findEl

Java Servlet API说明文档(2.1a版)(二)

servlet API对象的说明\r 这一部分包含了对Java Servlet API的全部类和接口的详细说明.这个说明与Javadoc API差不多,但是这份文档提供了更多的信息.API包含了两个软件包,十二个接口和九个类.软件包:javax.servlet 所包含的接口:RequestDispatcher:Servlet:ServletConfig:ServletContext:ServletRequest:ServletResponse:SingleThreadModel.所包含的类:Ge

《HTML5移动开发》—— 第1章 学习移动HTML5、CSS3和Java Script API之前的准备工作

第1章 学习移动HTML5.CSS3和Java Script API之前的准备工作 HTML5移动开发如果你跟我多少有点类似的话,你肯定已经痛恨旧版IE浏览器很多年了.那些浏览器满是失败.然而,它们在整个生命周期内在任何地方失败的方式是一样的[1].我们都知道IE6非常糟糕,但是它糟糕的方式是一样的.一旦我们搞清楚了如何填IE6的坑(polyfill[2]),我们就已经把它搞清楚了. 在移动世界,我们同样面临一些问题,不同的是这些问题以一种更新.更多样化且不断变化的方式存在.在不同设备上的不同浏

Java Mail API及其应用 —— 一个邮件列表服务器的实现 (二)(转贴)

服务器|邮件列表 邮件列表服务经常用于为工作组提供基于email的讨论环境,订阅者通过它讨论共同感兴趣的问题. 本文提供的示例程序ListServer是一个简单的邮件列表转发服务器:它从指定帐号读取新邮件并发送给所有订阅者.Java Mail API不仅使得实现其基本功能相当简单(使用缺省的POP3和SMTP),而且保证了程序易于支持任何可能遇到的系统环境. 运行该程序需要包含以下支持文件:Java Mail (mail.jar).JAF(activation.jar)以及缺省的POP3支持(p

全面挖掘Java Excel API 使用方法

excel 使用Windows操作系统的朋友对Excel(电子表格)一定不会陌生,但是要使用Java语言来操纵Excel文件并不是一件容易的事.在Web应用日益盛行的今天,通过Web来操作Excel文件的需求越来越强烈,目前较为流行的操作是在JSP或Servlet 中创建一个CSV (comma separated values)文件,并将这个文件以MIME,text/csv类型返回给浏览器,接着浏览器调用Excel并且显示CSV文件.这样只是说可以访问到Excel文件,但是还不能真正的操纵Ex

电信网管中的Java客户端(二)

客户端|网管 电信网管中的Java客户端(二) 1.概述前文讲述了用Java开发电信网管界面系统遇到的困难.其中,制作网络拓扑图是我们第一个必须克服的困难.本文概述如何使用和制作网络拓扑图的产品和方法和思路. 2.电信网络拓扑组件的要求网络拓扑图是电信网管客户端的核心.对于电信网络,在使用任何网络拓扑组件时,必须注意电信网络的一些特点: · 数据量大.一般电信网络的规模都比较大,网络设备数量多,拓扑复杂.网络拓扑图界面必须考虑到能够处理大数据量的网络节点和连接. · 多层次展示网络.在一个综合电

jdk-关于java JDK API的问题

问题描述 关于java JDK API的问题 关于java,JDK API 6.0中文版中那些资料怎么看,主要是注意哪些部分的内容? 解决方案 新手写程序,最好找教材去学,而不是看什么api,因为你什么都不会,你应该学基础. 好比学英语,你不应该一上来被英文字典.而api其实就相当于字典. 解决方案二: 新手写程序,最好找教材去学,而不是看什么api,因为你什么都不会,你应该学基础. 好比学英语,你不应该一上来背英文字典.而api其实就相当于字典. 解决方案三: 另外还有一点,就是如果你英文不好

java基础小问题 ...-java基础api小问题随便给解决一下

问题描述 java基础api小问题随便给解决一下 string a="csagmtacsmgtcs";问计算cs的个数求大神代码 解决方案 Pattern p = Pattern.compile("cs"); Matcher m = p.matcher("csagmtacsmgtcs"); int sum = 0; while(m.find()) { sum ++; } System.out.println(sum); 解决方案二: 给楼上补下

《Java程序设计习题精析与实验指导》一第3章 Java的结构化程序设计

第3章 Java的结构化程序设计 3.1 重点复习 3.1.1 顺序结构及基本语句 掌握结构化程序设计的基本概念. 掌握顺序结构流程的执行原理.赋值语句以及输入语句的使用. 3.1.2 选择结构语句 不同选择结构流程的语句形式与执行原理如下所示. (1)if语句 if (表达式) { 语句块 }(2)if-else语句 if (表达式) { 语句块1 } else { 语句块2 }(3)if-else if语句 if(表达式1){ 语句块1 } else if (表达式2){ 语句块2 } -