开发者社区> 流柯> 正文

Java Selenium封装--RemoteWebDriver

简介: 1 package com.selenium.driver; 2 import java.io.File; 3 import java.io.IOException; 4 import java.
+关注继续查看
  1 package com.selenium.driver;
  2 import java.io.File;
  3 import java.io.IOException;
  4 import java.net.URL;
  5 import java.util.HashMap;
  6 import java.util.Map;
  7 import java.util.Set;
  8 import java.util.regex.Matcher;
  9 import java.util.regex.Pattern;
 10 import org.apache.commons.io.FileUtils;
 11 import org.openqa.selenium.Alert;
 12 import org.openqa.selenium.Capabilities;
 13 import org.openqa.selenium.Cookie;
 14 import org.openqa.selenium.JavascriptExecutor;
 15 import org.openqa.selenium.NoSuchElementException;
 16 import org.openqa.selenium.OutputType;
 17 import org.openqa.selenium.TakesScreenshot;
 18 import org.openqa.selenium.WebDriver;
 19 import org.openqa.selenium.WebElement;
 20 import org.openqa.selenium.remote.Augmenter;
 21 import org.openqa.selenium.remote.RemoteWebDriver;
 22 import org.openqa.selenium.remote.RemoteWebElement;
 23 public class JSWebDriver{
 24     private RemoteWebDriver wd = null;
 25     private JavascriptExecutor jse = null;
 26     
 27     public JSWebDriver(URL remoteAddress, Capabilities desiredCapabilities) {
 28         wd = new RemoteWebDriver(remoteAddress, desiredCapabilities);
 29     }
 30     
 31     ///
 32     ///浏览器url导航
 33     ///
 34     public void goTo(String url){
 35         wd.get(url);
 36     }    
 37     
 38     ///
 39     ///浏览器退出
 40     ///
 41     public void quit(){
 42         wd.quit();
 43     }
 44 
 45     ///
 46     ///浏览器后退
 47     ///
 48     public void back(){
 49         wd.navigate().back();
 50     }
 51 
 52     ///
 53     ///浏览器前进
 54     ///
 55     public void forward(){
 56         wd.navigate().forward();
 57     }
 58     
 59     ///
 60     ///浏览器刷新
 61     ///
 62     public void refresh(){
 63         wd.navigate().refresh();
 64     }
 65     
 66     ///
 67     ///切换到新浏览器窗口;按照title、url、index;支持正则匹配
 68     ///
 69     public void switchToWindow(String by, String value, String...match) throws Exception{
 70         String currenthandle = wd.getWindowHandle();
 71         Set<String> handles = wd.getWindowHandles();
 72         int currentIndex = -1;
 73         String searchString = "";
 74         for(String handle : handles){
 75             currentIndex += 1;
 76             if(handle.equals(currenthandle)){
 77                 continue;
 78             }else{                
 79                 wd.switchTo().window(handle);
 80                 if (match.length == 1 && match[0].equals("regex")){                    
 81                     if (by.equals("title")){
 82                         searchString = wd.getTitle();
 83                     }else if (by.equals("url")){
 84                         searchString = wd.getCurrentUrl();
 85                     }    
 86                     Pattern pattern = Pattern.compile(value);
 87                     Matcher matcher = pattern.matcher(searchString);
 88                     if(matcher.find()){
 89                         return;
 90                     }
 91                 }else{
 92                     if (by.equals("title")){
 93                         searchString = wd.getTitle();
 94                     }else if (by.equals("url")){
 95                         searchString = wd.getCurrentUrl();
 96                     }else if (by.equals("index")){
 97                         searchString = Integer.toString(currentIndex);
 98                     }
 99                     if(searchString.equals(value)){
100                         return;
101                     }
102                 }
103             }
104         }
105         Exception e = new Exception("Swtich Window Failed, Please Make Sure The Locator Was Right.");
106         throw e;
107     }
108     
109     ///
110     ///JS弹框确认
111     ///
112     public void clickAlertSure(){
113         Alert alert = wd.switchTo().alert();
114         alert.accept();
115     }
116     
117     ///
118     ///JS弹框取消
119     ///
120     public void clickAlertDismiss()
121     {
122         Alert alert = wd.switchTo().alert();
123         alert.dismiss();
124     }
125     
126     ///
127     ///设置prompt弹框内容
128     ///
129     public void setPromptMessage(String parameter){
130         Alert alert = wd.switchTo().alert();
131         alert.sendKeys(parameter);
132     }
133     
134     ///
135     ///获取JS弹框内容
136     ///
137     public String getPromptMessage(){
138         Alert alert = wd.switchTo().alert();
139         return alert.getText();
140     }    
141     
142     ///
143     ///切换到Frame窗口;先定位到iframe元素
144     ///
145     public void switchToFrame(JSWebElement jselement){        
146         wd.switchTo().frame(jselement.getNativeWebElement());
147     }
148 
149     ///
150     ///执行JS脚本
151     ///
152     public void executeScript(String parameter){
153         JavascriptExecutor js = getJSE();
154         js.executeScript(parameter);
155     }
156 
157     ///
158     ///获取指定cookie
159     ///
160     public String getCookie(String name){
161         Cookie cookie=wd.manage().getCookieNamed(name);
162         if (cookie == null){ return "null"; }
163         return cookie.getValue();
164     }
165     
166     ///
167     ///获取所有cookie
168     ///
169     public Map<String, String> getCookies(){
170         Map<String, String> newCookies = new HashMap<String, String>();
171         Set<Cookie> cookies= wd.manage().getCookies();
172         for (Cookie cookie : cookies){
173             newCookies.put(cookie.getName(), cookie.getValue());
174         }
175         return newCookies;
176     }
177     
178     ///
179     ///截取屏幕
180     ///
181     public void getScreen(String filepath){
182         WebDriver augmentedDriver = new Augmenter().augment(this.wd); 
183         TakesScreenshot ts = (TakesScreenshot) augmentedDriver;
184         File screenShotFile = ts.getScreenshotAs(OutputType.FILE); 
185         try { 
186             FileUtils.copyFile (screenShotFile, new File(filepath)); 
187         }catch (IOException e){ 
188             e.printStackTrace(); 
189         } 
190     }
191 
192     ///
193     ///获取title
194     ///
195     public String getTitle(){
196         return wd.getTitle();
197     }    
198 
199     ///
200     ///获取url
201     ///
202     public String getUrl(){
203         return wd.getCurrentUrl();
204     }
205     
206     ///
207     ///获取HTML源码
208     ///
209     public String getSource(){
210         try {
211             Thread.sleep(500);
212         } catch (InterruptedException e) {
213             e.printStackTrace();
214         }
215         return wd.getPageSource();
216     }
217     
218     ///
219     ///滚动页面到指定位置
220     ///
221     public void scroll(String x, String y){
222         if (x.equals("left")){
223             x = "0";
224         }else if (x.equals("right")){
225             x = "document.body.scrollWidth";
226         }else if (x.equals("middle")){
227             x = "document.body.scrollWidth/2";
228         }
229         if (y.equals("top")){
230             y = "0";
231         }else if (y.equals("buttom")){
232             y = "document.body.scrollHeight";
233         }else if (y.equals("middle")){
234             y = "document.body.scrollHeight/2";
235         }
236         this.executeScript(String.format("scroll(%s,%s);", x, y));
237     }
238     
239     ///
240     ///最大化浏览器
241     ///
242     public void maximize(){
243         wd.manage().window().maximize();
244     }
245     
246     public JSWebElement findElementById(String using) {
247         try {
248             return new JSWebElement((RemoteWebElement)wd.findElementById(using));
249         }catch (NoSuchElementException e){
250             return new JSWebElement();
251         }
252     }
253     
254     public JSWebElement findElementByCssSelector(String using) {
255         try {
256             return new JSWebElement((RemoteWebElement)wd.findElementByCssSelector(using));
257         }catch (NoSuchElementException e){
258             return new JSWebElement();
259         }
260     }
261     
262     public JSWebElement findElementByXPath(String using) {
263         try {
264             return new JSWebElement((RemoteWebElement)wd.findElementByXPath(using));
265         }catch (NoSuchElementException e){
266             return new JSWebElement();
267         }
268     }
269 
270     public JSWebElement findElementByLinkText(String using) {
271         try {
272             return new JSWebElement((RemoteWebElement)wd.findElementByLinkText(using));
273         }catch (NoSuchElementException e){
274             return new JSWebElement();
275         }
276     }
277     
278     public JSWebElement findElementByDom(String using) {
279         try {
280             JavascriptExecutor js = this.getJSE();
281             WebElement we = (WebElement)js.executeScript(String.format("return %s", using));            
282             return new JSWebElement((RemoteWebElement)we);
283         }catch (NoSuchElementException e){
284             return new JSWebElement();
285         }
286     }
287     
288     ///
289     ///获取原生的RemoteWebdriver对象
290     ///
291     public RemoteWebDriver getNativeWebDriver(){
292         return this.wd;
293     }
294     
295     private JavascriptExecutor getJSE(){
296         if (this.jse == null){
297             this.jse = (JavascriptExecutor) this.wd;                
298         }        
299         return jse;
300     }
301 }

 


img_42a4adae4716d0e15c3eeaabfd040044.png

注:转载需注明出处及作者。

流柯      

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用SSH远程登录阿里云ECS服务器
远程连接服务器以及配置环境
13322 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
18965 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
9603 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
33244 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
18701 0
+关注
流柯
测试群:248249896
190
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载