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 }