文档章节

Java Selenium封装--RemoteWebDriver

xxjbs001
 xxjbs001
发布于 2015/04/06 18:41
字数 659
阅读 55
收藏 0
点赞 0
评论 0
package com.selenium.driver;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.Capabilities;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.Augmenter;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.RemoteWebElement;
public class JSWebDriver{
	private RemoteWebDriver wd = null;
	private JavascriptExecutor jse = null;
	
	public JSWebDriver(URL remoteAddress, Capabilities desiredCapabilities) {
		wd = new RemoteWebDriver(remoteAddress, desiredCapabilities);
	}
	
	///
	///浏览器url导航
	///
	public void goTo(String url){
		wd.get(url);
	}	
	
	///
	///浏览器退出
	///
	public void quit(){
		wd.quit();
	}

	///
	///浏览器后退
	///
	public void back(){
		wd.navigate().back();
	}

	///
	///浏览器前进
	///
	public void forward(){
		wd.navigate().forward();
	}
	
	///
	///浏览器刷新
	///
	public void refresh(){
		wd.navigate().refresh();
	}
	
	///
	///切换到新浏览器窗口;按照title、url、index;支持正则匹配
	///
	public void switchToWindow(String by, String value, String...match) throws Exception{
		String currenthandle = wd.getWindowHandle();
		Set<String> handles = wd.getWindowHandles();
		int currentIndex = -1;
		String searchString = "";
		for(String handle : handles){
			currentIndex += 1;
			if(handle.equals(currenthandle)){
				continue;
			}else{				
				wd.switchTo().window(handle);
				if (match.length == 1 && match[0].equals("regex")){					
					if (by.equals("title")){
						searchString = wd.getTitle();
					}else if (by.equals("url")){
						searchString = wd.getCurrentUrl();
					}	
					Pattern pattern = Pattern.compile(value);
					Matcher matcher = pattern.matcher(searchString);
					if(matcher.find()){
						return;
					}
				}else{
					if (by.equals("title")){
						searchString = wd.getTitle();
					}else if (by.equals("url")){
						searchString = wd.getCurrentUrl();
					}else if (by.equals("index")){
						searchString = Integer.toString(currentIndex);
					}
					if(searchString.equals(value)){
						return;
					}
				}
			}
		}
		Exception e = new Exception("Swtich Window Failed, Please Make Sure The Locator Was Right.");
		throw e;
	}
	
	///
	///JS弹框确认
	///
	public void clickAlertSure(){
		Alert alert = wd.switchTo().alert();
		alert.accept();
	}
	
	///
	///JS弹框取消
	///
	public void clickAlertDismiss()
	{
		Alert alert = wd.switchTo().alert();
		alert.dismiss();
	}
	
	///
	///设置prompt弹框内容
	///
	public void setPromptMessage(String parameter){
		Alert alert = wd.switchTo().alert();
		alert.sendKeys(parameter);
	}
	
	///
	///获取JS弹框内容
	///
	public String getPromptMessage(){
		Alert alert = wd.switchTo().alert();
		return alert.getText();
	}	
	
	///
	///切换到Frame窗口;先定位到iframe元素
	///
	public void switchToFrame(JSWebElement jselement){		
		wd.switchTo().frame(jselement.getNativeWebElement());
	}

	///
	///执行JS脚本
	///
	public void executeScript(String parameter){
		JavascriptExecutor js = getJSE();
		js.executeScript(parameter);
	}

	///
	///获取指定cookie
	///
	public String getCookie(String name){
		Cookie cookie=wd.manage().getCookieNamed(name);
		if (cookie == null){ return "null"; }
		return cookie.getValue();
	}
	
	///
	///获取所有cookie
	///
	public Map<String, String> getCookies(){
		Map<String, String> newCookies = new HashMap<String, String>();
		Set<Cookie> cookies= wd.manage().getCookies();
		for (Cookie cookie : cookies){
			newCookies.put(cookie.getName(), cookie.getValue());
		}
		return newCookies;
	}
	
	///
	///截取屏幕
	///
	public void getScreen(String filepath){
		WebDriver augmentedDriver = new Augmenter().augment(this.wd); 
		TakesScreenshot ts = (TakesScreenshot) augmentedDriver;
		File screenShotFile = ts.getScreenshotAs(OutputType.FILE); 
		try { 
			FileUtils.copyFile (screenShotFile, new File(filepath)); 
		}catch (IOException e){ 
			e.printStackTrace(); 
		} 
	}

	///
	///获取title
	///
	public String getTitle(){
		return wd.getTitle();
	}	

	///
	///获取url
	///
	public String getUrl(){
		return wd.getCurrentUrl();
	}
	
	///
	///获取HTML源码
	///
	public String getSource(){
		try {
			Thread.sleep(500);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		return wd.getPageSource();
	}
	
	///
	///滚动页面到指定位置
	///
	public void scroll(String x, String y){
		if (x.equals("left")){
			x = "0";
		}else if (x.equals("right")){
			x = "document.body.scrollWidth";
		}else if (x.equals("middle")){
			x = "document.body.scrollWidth/2";
		}
		if (y.equals("top")){
			y = "0";
		}else if (y.equals("buttom")){
			y = "document.body.scrollHeight";
		}else if (y.equals("middle")){
			y = "document.body.scrollHeight/2";
		}
		this.executeScript(String.format("scroll(%s,%s);", x, y));
	}
	
	///
	///最大化浏览器
	///
	public void maximize(){
		wd.manage().window().maximize();
	}
	
	public JSWebElement findElementById(String using) {
		try {
			return new JSWebElement((RemoteWebElement)wd.findElementById(using));
		}catch (NoSuchElementException e){
			return new JSWebElement();
		}
	}
	
	public JSWebElement findElementByCssSelector(String using) {
		try {
			return new JSWebElement((RemoteWebElement)wd.findElementByCssSelector(using));
		}catch (NoSuchElementException e){
			return new JSWebElement();
		}
	}
	
	public JSWebElement findElementByXPath(String using) {
		try {
			return new JSWebElement((RemoteWebElement)wd.findElementByXPath(using));
		}catch (NoSuchElementException e){
			return new JSWebElement();
		}
	}

	public JSWebElement findElementByLinkText(String using) {
		try {
			return new JSWebElement((RemoteWebElement)wd.findElementByLinkText(using));
		}catch (NoSuchElementException e){
			return new JSWebElement();
		}
	}
	
	public JSWebElement findElementByDom(String using) {
		try {
			JavascriptExecutor js = this.getJSE();
			WebElement we = (WebElement)js.executeScript(String.format("return %s", using));			
			return new JSWebElement((RemoteWebElement)we);
		}catch (NoSuchElementException e){
			return new JSWebElement();
		}
	}
	
	///
	///获取原生的RemoteWebdriver对象
	///
	public RemoteWebDriver getNativeWebDriver(){
		return this.wd;
	}
	
	private JavascriptExecutor getJSE(){
		if (this.jse == null){
			this.jse = (JavascriptExecutor) this.wd;				
		}		
		return jse;
	}
}

© 著作权归作者所有

共有 人打赏支持
xxjbs001
粉丝 55
博文 298
码字总数 215621
作品 0
浦东
QA/测试工程师
2.2 Selenium 环境搭建

Java 环境搭建 下载JDK:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 安装JDK 配置Java 环境 校验是否安装完成 控制台输入: java –version 提示版......

米阳MeYoung ⋅ 04/24 ⋅ 0

自动化测试selenium在小公司的成功实践

前言 可能提到自动化测试selenium,大家都会想到用python语言来编写脚本。但我们选择了java语言,因为我相信大部分公司java程序员比python程序员多得多。而对于很多测试人员,并不能熟练使用...

邵磊 ⋅ 前天 ⋅ 0

java面试必备之ThreadLocal

按照传统的经验,如果某个对象是非线程安全的,在多线程环境下对象的访问需要采用synchronized进行同步。但是模板类并未采用线程同步机制,因为线程同步会降低系统的并发性能,此外代码同步解...

编程老司机 ⋅ 05/16 ⋅ 0

有一到五年开发经验的JAVA程序员需要掌握的知识与技能!

JAVA是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于JAVA,对C++等其他程序设计语言也一样管用。有编程高手认为,JAVA也好C也好没什么分别,拿来就用。为什么他们能达到如此...

java高级架构牛人 ⋅ 06/02 ⋅ 0

java编程学习常见面试题及答案

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/22 ⋅ 0

作为一个java程序员这些技能你都知道吗?

一、Java特点 1、 面向对象 尽管受到其前辈的影响,但Java没被设计成兼容其他语言源代码的程序。这允许Java开发组自由地从零开始。这样做的一个结果是,Java语言可以更直接、更易用、更实际的...

java高级架构牛人 ⋅ 05/23 ⋅ 0

「游戏引擎Mojoc」(10)Android NDK通用JNI调用Java代码封装

Mojoc提供了一个通用的工具类,来调用Android Java代码,以实现特定平台的功能。这个工具类封装了JNI使用的繁琐细和上下文对象的获取,提供了简单直接的API专注于Java类和方法的访问,并且实...

scottcgi ⋅ 05/20 ⋅ 0

ThreadLocal源码分析

阅读原文请访问我的博客 BrightLoong's Blog 一. 简介 提醒篇幅较大需耐心。 简介来自ThreadLocal类注释 ThreadLocal类提供了线程局部 (thread-local) 变量。这些变量与普通变量不同,每个线...

BrightLoong ⋅ 05/28 ⋅ 0

Java开发每日复盘2018_0511

今天主要跟大家来分享一下「MyBatis的使用」 一句话概括: 「MyBatis」,是一种介于Java对象与数据库(MySql等)之间的用于持久化存储的框架。 使用「MyBatis」好处: 可以更高效的,基于该框...

ZeroOSTalk ⋅ 05/13 ⋅ 0

Java编程基础知识点和技术点归纳

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/23 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

HiSDP —— 高效的C++软件开发平台

目前阿里集团每天有近1000PB的数据是通过LogAgent采集的,为了让LogAgent做到资源占用节省和高效采集,背后是基于HiSDP去构建的。 缘由 当决定采用C++编程语言去开发一个软件时,紧接着所面临...

阿里云云栖社区 ⋅ 6分钟前 ⋅ 0

zookeeper-3.4.12 下载与安装教程

一、zookeeper下载地址 http://mirrors.hust.edu.cn/apache/zookeeper/ 二、启动教程 把压缩包放在指定目录下 第三: 进入 conf文件夹底下 zoo_sample.cfg 文件名改成 zoo.cfg 第四步: 进入b...

泉天下 ⋅ 7分钟前 ⋅ 0

Oracle 中文日期转换

SELECT TO_date('2011年11月11日', 'yy"年"mm"月"dd"日"') FROM DUAL; 1. Oracle无法识别中文格式,所以添加双引号。 2. 后面的格式是指字符串在转换前的格式,而不是指转换后的格式。...

名侦探柯南 ⋅ 8分钟前 ⋅ 0

MySell:API Spring Boot

起步 类目 商品 订单

BeanHo ⋅ 11分钟前 ⋅ 0

Spring方法拦截器MethodInterceptor

参考资料 1、Spring方法拦截器MethodInterceptor 2、Sharding JDBC源码分析-JdbcMethodInvocation类的作用

哎小艾 ⋅ 14分钟前 ⋅ 0

正则表达式

元字符 元字符,又叫字符集,就是用一些特殊符号表示特定种类的字符或位置。 匹配字符 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 匹配...

wangchen1999 ⋅ 14分钟前 ⋅ 0

数据库数据导入Elasticsearch案例分享

基于bboss持久层和bboss elasticsearch客户端实现数据库数据导入es案例分享(支持各种数据库和各种es版本) 1.案例对应的源码 https://gitee.com/bboss/bboss-elastic/blob/master/bboss-el...

bboss ⋅ 15分钟前 ⋅ 0

动手---sbt(2)

参考 https://blog.csdn.net/leishangwen/article/details/46225587 建立一个chisel_max目录,文件内容如后面所述,现在开始执行命令: joe@joe-Aspire-Z3730:/media/sdb4/download/scala$ c......

whoisliang ⋅ 21分钟前 ⋅ 0

纯js实现最简单的文件上传(后台使用MultipartFile)

<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>XMLHttpRequest上传文件</title> <script type="text/javascript"> //图片上传 var xhr......

孟飞阳 ⋅ 26分钟前 ⋅ 0

iOS宇宙大战游戏、调试工具、各种动画、AR相册、相机图片编辑等源码

iOS精选源码 日期时间选择器,swift Space Battle 宇宙大战 SpriteKit游戏源码 LLDebugTool - 便捷的IOS调试工具(新增截屏功能) 相机扫描or长按识别二维码、FMDB、键盘动态高度、定位等 动画...

sunnyaigd ⋅ 27分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部