1 packagecom.selenium.driver;2 importjava.io.File;3 importjava.io.IOException;4 importjava.net.URL;5 importjava.util.HashMap;6 importjava.util.Map;7 importjava.util.Set;8 importjava.util.regex.Matcher;9 importjava.util.regex.Pattern;10 importorg.apache.commons.io.FileUtils;11 importorg.openqa.selenium.Alert;12 importorg.openqa.selenium.Capabilities;13 importorg.openqa.selenium.Cookie;14 importorg.openqa.selenium.JavascriptExecutor;15 importorg.openqa.selenium.NoSuchElementException;16 importorg.openqa.selenium.OutputType;17 importorg.openqa.selenium.TakesScreenshot;18 importorg.openqa.selenium.WebDriver;19 importorg.openqa.selenium.WebElement;20 importorg.openqa.selenium.remote.Augmenter;21 importorg.openqa.selenium.remote.RemoteWebDriver;22 importorg.openqa.selenium.remote.RemoteWebElement;23 public classJSWebDriver{24 private RemoteWebDriver wd = null;25 private JavascriptExecutor jse = null;26
27 publicJSWebDriver(URL remoteAddress, Capabilities desiredCapabilities) {28 wd = newRemoteWebDriver(remoteAddress, desiredCapabilities);29 }30
31 ///
32 ///浏览器url导航
33 ///
34 public voidgoTo(String url){35 wd.get(url);36 }37
38 ///
39 ///浏览器退出
40 ///
41 public voidquit(){42 wd.quit();43 }44
45 ///
46 ///浏览器后退
47 ///
48 public voidback(){49 wd.navigate().back();50 }51
52 ///
53 ///浏览器前进
54 ///
55 public voidforward(){56 wd.navigate().forward();57 }58
59 ///
60 ///浏览器刷新
61 ///
62 public voidrefresh(){63 wd.navigate().refresh();64 }65
66 ///
67 ///切换到新浏览器窗口;按照title、url、index;支持正则匹配
68 ///
69 public void switchToWindow(String by, String value, String...match) throwsException{70 String currenthandle =wd.getWindowHandle();71 Set 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 throwe;107 }108
109 ///
110 ///JS弹框确认
111 ///
112 public voidclickAlertSure(){113 Alert alert =wd.switchTo().alert();114 alert.accept();115 }116
117 ///
118 ///JS弹框取消
119 ///
120 public voidclickAlertDismiss()121 {122 Alert alert =wd.switchTo().alert();123 alert.dismiss();124 }125
126 ///
127 ///设置prompt弹框内容
128 ///
129 public voidsetPromptMessage(String parameter){130 Alert alert =wd.switchTo().alert();131 alert.sendKeys(parameter);132 }133
134 ///
135 ///获取JS弹框内容
136 ///
137 publicString getPromptMessage(){138 Alert alert =wd.switchTo().alert();139 returnalert.getText();140 }141
142 ///
143 ///切换到Frame窗口;先定位到iframe元素
144 ///
145 public voidswitchToFrame(JSWebElement jselement){146 wd.switchTo().frame(jselement.getNativeWebElement());147 }148
149 ///
150 ///执行JS脚本
151 ///
152 public voidexecuteScript(String parameter){153 JavascriptExecutor js =getJSE();154 js.executeScript(parameter);155 }156
157 ///
158 ///获取指定cookie
159 ///
160 publicString getCookie(String name){161 Cookie cookie=wd.manage().getCookieNamed(name);162 if (cookie == null){ return "null"; }163 returncookie.getValue();164 }165
166 ///
167 ///获取所有cookie
168 ///
169 public MapgetCookies(){170 Map newCookies = new HashMap();171 Set cookies=wd.manage().getCookies();172 for(Cookie cookie : cookies){173 newCookies.put(cookie.getName(), cookie.getValue());174 }175 returnnewCookies;176 }177
178 ///
179 ///截取屏幕
180 ///
181 public voidgetScreen(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, newFile(filepath));187 }catch(IOException e){188 e.printStackTrace();189 }190 }191
192 ///
193 ///获取title
194 ///
195 publicString getTitle(){196 returnwd.getTitle();197 }198
199 ///
200 ///获取url
201 ///
202 publicString getUrl(){203 returnwd.getCurrentUrl();204 }205
206 ///
207 ///获取HTML源码
208 ///
209 publicString getSource(){210 try{211 Thread.sleep(500);212 } catch(InterruptedException e) {213 e.printStackTrace();214 }215 returnwd.getPageSource();216 }217
218 ///
219 ///滚动页面到指定位置
220 ///
221 public voidscroll(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 voidmaximize(){243 wd.manage().window().maximize();244 }245
246 publicJSWebElement findElementById(String using) {247 try{248 return newJSWebElement((RemoteWebElement)wd.findElementById(using));249 }catch(NoSuchElementException e){250 return newJSWebElement();251 }252 }253
254 publicJSWebElement findElementByCssSelector(String using) {255 try{256 return newJSWebElement((RemoteWebElement)wd.findElementByCssSelector(using));257 }catch(NoSuchElementException e){258 return newJSWebElement();259 }260 }261
262 publicJSWebElement findElementByXPath(String using) {263 try{264 return newJSWebElement((RemoteWebElement)wd.findElementByXPath(using));265 }catch(NoSuchElementException e){266 return newJSWebElement();267 }268 }269
270 publicJSWebElement findElementByLinkText(String using) {271 try{272 return newJSWebElement((RemoteWebElement)wd.findElementByLinkText(using));273 }catch(NoSuchElementException e){274 return newJSWebElement();275 }276 }277
278 publicJSWebElement findElementByDom(String using) {279 try{280 JavascriptExecutor js = this.getJSE();281 WebElement we = (WebElement)js.executeScript(String.format("return %s", using));282 return newJSWebElement((RemoteWebElement)we);283 }catch(NoSuchElementException e){284 return newJSWebElement();285 }286 }287
288 ///
289 ///获取原生的RemoteWebdriver对象
290 ///
291 publicRemoteWebDriver getNativeWebDriver(){292 return this.wd;293 }294
295 privateJavascriptExecutor getJSE(){296 if (this.jse == null){297 this.jse = (JavascriptExecutor) this.wd;298 }299 returnjse;300 }301 }