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

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

流柯      

目录
相关文章
|
2月前
|
安全 Java 编译器
Java的封装详解
封装和多态是面向对象编程(OOP)的重要概念。封装通过私有属性和公共方法实现数据隐藏和保护,使类的内部细节对外部不可见;多态则通过方法重载和重写实现同一方法在不同对象上的不同表现形式,增强了代码的灵活性和可维护性。两者结合使用,可以使Java程序更加安全、灵活且易于维护。
|
2月前
|
Java
Java的封装详解
封装是Java中实现数据隐藏和保护的核心机制。它通过将对象的状态和行为结合并限制外部直接访问,确保类的内部细节对外不可见,仅能通过公共方法访问和修改对象状态。封装带来了数据隐藏、提高代码可维护性和增强安全性等好处。在Java中,封装主要通过将属性设为私有并提供getter和setter方法来实现。这种方式不仅保护了数据完整性,还允许在修改类内部实现时不影响外部代码,从而提升程序的健壮性和可读性。
|
29天前
|
Web App开发 Java
使用java操作浏览器的工具selenium-java和webdriver下载地址
【10月更文挑战第12天】Selenium-java依赖包用于自动化Web测试,版本为3.141.59。ChromeDriver和EdgeDriver分别用于控制Chrome和Edge浏览器,需确保版本与浏览器匹配。示例代码展示了如何使用Selenium-java模拟登录CSDN,包括设置驱动路径、添加Cookies和获取页面源码。
|
2月前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
2月前
|
SQL Java 编译器
Java——类与对象(封装)
封装是面向对象编程中的概念,指将数据(属性)和相关操作(方法)组合成独立单元(类),使外部无法直接访问对象的内部状态,只能通过提供的方法进行交互,从而保护数据安全。例如,手机将各种组件封装起来,只暴露必要的接口供外部使用。实现封装时,使用`private`关键字修饰成员变量,并提供`get`和`set`方法进行访问和修改。此外,介绍了包的概念、导入包的方式及其注意事项,以及`static`关键字的使用,包括静态变量和方法的初始化与代码块的加载顺序。
46 10
Java——类与对象(封装)
|
2月前
|
安全 Java 数据安全/隐私保护
Java 封装怎么理解
封装是Java中的一种重要机制,它将对象的状态(数据)和行为(方法)打包在一起并控制外部访问权限,以保护数据不被随意修改。封装的主要目的包括数据保护、接口设计和增强模块性。通过使用`private`、`protected`及`public`等访问控制修饰符,结合getter和setter方法,可以有效隐藏对象内部实现细节。下面是一个简单的`BankAccount`类示例,展示了如何通过封装保护类的内部状态,确保数据安全和一致性,简化类的使用。理解封装有助于编写高质量代码和设计优秀程序架构。
|
2月前
|
Java 数据安全/隐私保护
Java 封装详解
在 Java 中,封装是面向对象编程的关键特性,通过将对象的状态(数据)和行为(方法)结合并利用访问控制保护数据,防止外部随意访问和修改。主要特点包括访问控制(如 `private` 和 `protected`)、数据隐藏及方法暴露(如 getter 和 setter)。封装的优点在于保护数据、隐藏实现细节、易于维护以及提高代码可读性。下面是一个简单的 `Person` 类封装示例,展示了如何通过 getter 和 setter 控制对类内部状态的访问,并进行合法性检查。总结而言,封装有助于构建清晰、易用且可维护的代码结构,是编写高质量 Java 程序的重要原则。
|
2月前
|
安全 Java 开发者
Java修饰符与封装:理解访问权限、行为控制与数据隐藏的重要性
Java中的修饰符和封装概念是构建健壯、易维护和扩展的Java应用程序的基石。通过合理利用访问权限修饰符和非访问修饰符,开发者能够设计出更加安全、灵活且高效的代码结构。封装不仅是面向对象编程的核心原则之一,也是提高软件项目质量和可维护性的关键策略。
20 1
|
3月前
|
安全 Java
Java基础面试十四】、 封装的目的是什么,为什么要有封装?
这篇文章讨论了封装在面向对象编程中的目的,强调封装可以隐藏类的实现细节,通过方法控制对数据的访问,保证数据完整性,并提高代码的可维护性。
Java基础面试十四】、 封装的目的是什么,为什么要有封装?
|
3月前
|
存储 Java 数据库
下一篇
无影云桌面