Java Selenium封装--RemoteWebDriver

来源:互联网 发布:20式82毫米迫击炮数据 编辑:程序博客网 时间:2024/06/08 11:13
  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     ///获取指定cookie159     ///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     ///获取所有cookie168     ///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     ///获取title194     ///195     public String getTitle(){196         return wd.getTitle();197     }    198 199     ///200     ///获取url201     ///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 }

 

0 0
原创粉丝点击