第4章 Selenium2-java WebDriver API (二)

简介: 4.8  定位一组元素  定位一组元素的方法与定位单个元素的方法类似,唯一的区别是在单词element后面多了一个s表示复数。定位一组元素一般用于以下场景: ·批量操作元素,例如勾选页面上所有的复选框。

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

 

相关文章
|
5月前
|
Java API Maven
如何使用Java开发抖音API接口?
在数字化时代,社交媒体平台如抖音成为生活的重要部分。本文详细介绍了如何用Java开发抖音API接口,从创建开发者账号、申请API权限、准备开发环境,到编写代码、测试运行及注意事项,全面覆盖了整个开发流程。
846 10
|
5月前
|
数据采集 测试技术 Python
自动化淘宝秒杀:使用Selenium WebDriver的实战指南
本文详细介绍了如何利用Selenium WebDriver自动化淘宝秒杀操作,包括环境配置、代码实现及注意事项,旨在帮助读者提升秒杀成功率,同时提醒合理使用以遵守平台规则。
276 8
|
1月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
5月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
167 2
|
1月前
|
缓存 安全 Java
《从头开始学java,一天一个知识点》之:字符串处理:String类的核心API
🌱 **《字符串处理:String类的核心API》一分钟速通!** 本文快速介绍Java中String类的3个高频API:`substring`、`indexOf`和`split`,并通过代码示例展示其用法。重点提示:`substring`的结束索引不包含该位置,`split`支持正则表达式。进一步探讨了String不可变性的高效设计原理及企业级编码规范,如避免使用`new String()`、拼接时使用`StringBuilder`等。最后通过互动解密游戏帮助读者巩固知识。 (上一篇:《多维数组与常见操作》 | 下一篇预告:《输入与输出:Scanner与System类》)
68 11
|
2月前
|
数据采集 JSON Java
Java爬虫获取微店快递费用item_fee API接口数据实现
本文介绍如何使用Java开发爬虫程序,通过微店API接口获取商品快递费用(item_fee)数据。主要内容包括:微店API接口的使用方法、Java爬虫技术背景、需求分析和技术选型。具体实现步骤为:发送HTTP请求获取数据、解析JSON格式的响应并提取快递费用信息,最后将结果存储到本地文件中。文中还提供了完整的代码示例,并提醒开发者注意授权令牌、接口频率限制及数据合法性等问题。
|
2月前
|
数据采集 存储 Java
Java爬虫获取微店店铺所有商品API接口设计与实现
本文介绍如何使用Java设计并实现一个爬虫程序,以获取微店店铺的所有商品信息。通过HttpClient发送HTTP请求,Jsoup解析HTML页面,提取商品名称、价格、图片链接等数据,并将其存储到本地文件或数据库中。文中详细描述了爬虫的设计思路、代码实现及注意事项,包括反爬虫机制、数据合法性和性能优化。此方法可帮助商家了解竞争对手,为消费者提供更全面的商品比较。
|
2月前
|
数据采集 算法 Java
如何在Java爬虫中设置动态延迟以避免API限制
如何在Java爬虫中设置动态延迟以避免API限制
|
3月前
|
算法 Java 程序员
菜鸟之路Day06一一Java常用API
《菜鸟之路Day06——Java常用API》由blue编写,发布于2025年1月24日。本文详细介绍了Java中常用的API,包括JDK7的时间类(Date、SimpleDateFormat、Calendar)和JDK8新增的时间API(ZoneId、Instant、DateTimeFormatter等),以及包装类的使用。通过多个实例练习,如时间计算、字符串转整数、十进制转二进制等,帮助读者巩固所学内容,提升编程技能。文章强调了理论与实践结合的重要性,鼓励读者多做练习以提高学习效率。
108 28
|
2月前
|
缓存 Java 应用服务中间件
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
414 5

热门文章

最新文章