代码语言:javascript复制
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 }