第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(); }
}
第4章 Selenium2-java WebDriver API (二)的更多相关文章
- python+selenium自动化软件测试(第2章):WebDriver API
2.1 操作元素基本方法 前言前面已经把环境搭建好了,从这篇开始,正式学习selenium的webdriver框架.我们平常说的 selenium自动化,其实它并不是类似于QTP之类的有GUI界面的可 ...
- selenium2.0(WebDriver) API
1.1 下载selenium2.0的包 官方download包地址:http://code.google.com/p/selenium/downloads/list 官方User Guide: h ...
- 《Java从入门到失业》第二章:Java环境(二):JDK、JRE、JVM
2.2JDK.JRE.JVM 在JDK的安装目录中,我们发现有一个目录jre(其实如果是下一步下一步安装的,在和JDK安装目录同级目录下,还会有一个jre目录).初学Java的同学,有时候搞不清楚这3 ...
- Webdriver API (二)
(转载) 1.3 打开测试页面 对页面对测试,首先要打开被测试页面的地址(如:http://www.google.com),web driver 提供的get方法可以打开一个页面: // And no ...
- selenium2(WebDriver) API
selenium2(WebDriver) API 作者:Glen.He出处:http://www.cnblogs.com/puresoul/ 1.1 下载selenium2.0的包 官方downl ...
- Selenium2+Python:Webdriver API速记手册
由于web自动化常常需要控制浏览器行为和操作页面元素,相关函数又比较多,于是再此记下一份Webdriver API查阅文档以备不时之需. 参考:虫师<Selenium2自动化测试实战>,和 ...
- java JDK8 学习笔记——第11章 线程和并行API
第11章 线程与并行API 11.1 线程 11.1.1 线程 在java中,如果想在main()以外独立设计流程,可以撰写类操作java.lang.Runnable接口,流程的进入点是操作在run( ...
- [selenium webdriver Java]常用api
1. 获取元素文本 WebElement类的getText()方法返回元素的innerText属性.所以元素里如果有子节点一样也会被返回出来.如下所示 public class GetText { @ ...
- java基础(二章)
java基础(二章) 一,变量 1.变量是内存中的一个标识符号,用于存储数据 2.变量命名规则 l 必须以字母.下划线 _ .美元符号 $ 开头 l 变量中,可以包括数字 l 变量中,不能出现特 ...
随机推荐
- How to configure Samba Server share on Debian 9 Stretch Linux
Lubos Rendek Debian 13 June 2017 Contents 1. Objective 2. Operating System and Software Versions 3. ...
- SSRF绕过filter_var(),preg_match()和parse_url()
1.利用curl的变量解释符$ php版本 利用代码 /*ssrf.php*/<?php echo ]."n"; // check if argument is a vali ...
- boost-字符文本处理
1.lexical_cast 一些常见的数值,字符互转函数: 整型int: itoa()._itoa_s atoi()._ttoi 无符号整型unsigned int: _ultoa_s()._ult ...
- 深入理解定位父级offsetParent及偏移大小offsetTop / offsetLeft / offsetHeight / offsetWidth
深入理解定位父级offsetParent及偏移大小 [转载] 前面的话 偏移量(offset dimension)是javascript中的一个重要的概念.涉及到偏移量的主要是offsetLeft.o ...
- 自己封装的简单DbDao
首先,DbDao是一个用来操作数据库的类.需要对数据库的驱动包 要操作数据库首先要获得链接,这时候就需要链接数据库的所有参数了,包括driver,url,user,password.(全部定义为pri ...
- commons-text StrBuilder字符串构建工具类例子
package com.skylink.junge.demo; import java.util.ArrayList; import java.util.List; import org.apache ...
- zabbix docker - 安装和初始化配置
zabbix docker - 安装和初始化配置 安装zabbix server docker-mysql版本 zabbix server支持不同的数据库(详见zabbix的docker hub),这 ...
- jsapi微信支付
JSAPI微信支付 引用js <script type="text/javascript" src="http://res.wx.qq.com/open/js/jw ...
- blender 快捷键手动整理
armature envelop 设置骨骼影响范围:Edit Mode 下,选中骨头的其中一端,按 Alt + s,缩放 T 呼出 Tools N 呼出 Property Ctrl + Alt + Q ...
- Yii2 三层设计模式:SQL Command、Query builder、Active Record(ORM)
用Yii2也有一段时间了,发现Yii2 Framework对Database的操作有非常良好的结构和弹性. 接下来介绍三种数据库操作方式. SQL Command Level: // Get DB c ...