您的位置:首页 > 编程语言 > Java开发

Java Selenium封装--RemoteWebElement

2017-04-20 18:09 351 查看
1 package com.liuke.selenium.driver;
2
3 import java.sql.SQLException;
4 import java.util.List;
5 import org.json.JSONException;
6 import org.openqa.selenium.By;
7 import org.openqa.selenium.Dimension;
8 import org.openqa.selenium.JavascriptExecutor;
9 import org.openqa.selenium.NoSuchElementException;
10 import org.openqa.selenium.Point;
11 import org.openqa.selenium.WebDriver;
12 import org.openqa.selenium.WebElement;
13 import org.openqa.selenium.interactions.internal.Coordinates;
14 import org.openqa.selenium.remote.RemoteWebElement;
15 import org.openqa.selenium.support.ui.Select;
16
17 public class JSWebElement {
18     private RemoteWebElement we = null;
19     private JavascriptExecutor jse = null;
20
21     public JSWebElement(){}
22
23     public JSWebElement(RemoteWebElement we){
24         this.we = we;
25     }
26
27     ///
28     ///通过元素ID定位元素
29     ///
30     public JSWebElement findElementById(String using) {
31         try {
32             return new JSWebElement((RemoteWebElement)we.findElementById(using));
33         }catch (NoSuchElementException e){
34             return new JSWebElement();
35         }
36     }
37
38     ///
39     ///通过元素CSS表达式定位元素
40     ///
41     public JSWebElement findElementByCssSelector(String using) {
42         try {
43             return new JSWebElement((RemoteWebElement)we.findElementByCssSelector(using));
44         }catch (NoSuchElementException e){
45             return new JSWebElement();
46         }
47     }
48
49     ///
50     ///通过元素Xpath表达式定位元素
51     ///
52     public JSWebElement findElementByXPath(String using) {
53         try {
54             return new JSWebElement((RemoteWebElement)we.findElementByXPath(using));
55         }catch (NoSuchElementException e){
56             return new JSWebElement();
57         }
58     }
59
60     ///
61     ///通过链接的文字定位元素
62     ///
63     public JSWebElement findElementByLinkText(String using) {
64         try {
65             return new JSWebElement((RemoteWebElement)we.findElementByLinkText(using));
66         }catch (NoSuchElementException e){
67             return new JSWebElement();
68         }
69     }
70
71     ///
72     ///通过元素DOM表达式定位元素
73     ///
74     public JSWebElement findElementByDom(String using) {
75         try {
76             JavascriptExecutor js = this.getJSE();
77             WebElement we = (WebElement)js.executeScript(String.format("return %s", using));
78             return new JSWebElement((RemoteWebElement)we);
79         }catch (NoSuchElementException e){
80             return new JSWebElement();
81         }
82     }
83
84     ///
85     ///判断元素是否存在
86     ///
87     public Boolean isExist(){
88         if (we != null){
89             return true;
90         }else{
91             return false;
92         }
93     }
94
95     ///
96     ///获取元素的HTML内容
97     ///
98     public String getHtml(){
99         return we.getAttribute("outerHTML");
100     }
101
102     ///
103     ///获取元素的文本内容
104     ///
105     public String getText(){
106         return we.getText();
107     }
108
109     ///
110     ///获取元素的value值
111     ///
112     public String getValue(){
113         return this.getAttribute("value");
114     }
115
116     ///
117     ///获取元素的特定属性值
118     ///
119     public String getAttribute(String name){
120         return we.getAttribute(name);
121     }
122
123     ///
124     ///向可输入元素发送内容,如:text、textarea、filefield等
125     ///
126     public void sendKeys(String string){
127         String old_bg = this.setBackground("yellow");
128         try {
129             Thread.sleep(800);
130         } catch (InterruptedException e) {
131             e.printStackTrace();
132         }
133         we.sendKeys(string);
134         this.setBackground(old_bg);
135     }
136
137     ///
138     ///判断元素是否可用
139     ///
140     public boolean isEnabled(){
141         return we.isEnabled();
142     }
143
144     ///
145     ///判断元素是否可见
146     ///
147     public boolean isVisible(){
148         return we.isDisplayed();
149     }
150
151     ///
152     ///清空可编辑元素的内容。不可编辑元素次操作会抛异常
153     ///
154     public void clear(){
155         we.clear();
156     }
157
158     ///
159     ///对元素进行点击操作
160     ///
161     public void click(){
162         we.click();
163     }
164
165     ///
166     ///检查元素的特定属性值
167     ///
168     public void checkAttr(String attribute, JSWebUtils utils) throws SQLException, JSONException
169     {
170         String [] attributes=attribute.split("=", 2);
171         String actual = this.we.getAttribute(attributes[0]);
172         if (actual == null){ actual = "null"; }
173         utils.checkPointBase(actual,attributes[1]);
174     }
175
176     ///
177     ///获取元素的CSS值
178     ///
179     public String getCssValue(String name)
180     {
181         return we.getCssValue(name);
182     }
183
184     ///
185     ///判断元素是否被选中
186     ///
187     public boolean isSelected()
188     {
189         return we.isSelected();
190     }
191
192     ///
193     ///可选元素进行选中操作;如:select
194     ///
195     public void select(String by, String value) throws Exception
196     {
197         if (we.getTagName().equals("select")){
198             Select select = new Select(we);
199             if (by.equals("index")){
200                 select.selectByIndex(Integer.parseInt(value));
201             }else if (by.equals("value")){
202                 select.selectByValue(value);
203             }else if (by.equals("text")){
204                 select.selectByVisibleText(value);
205             }
206         }else{
207             Exception e = new Exception("The element is not SELECT Object");
208             throw e;
209         }
210     }
211
212     ///
213     ///对可选中元素进行取消选择操作;如:SELECT in multiple type
214     ///
215     public void deSelect(String by, String...value) throws Exception
216     {
217         if (we.getTagName().equals("select")){
218             Select select = new Select(we);
219             if (by.equals("index")){
220                 select.deselectByIndex(Integer.parseInt(value[0]));
221             }else if (by.equals("value")){
222                 select.deselectByValue(value[0]);
223             }else if (by.equals("text")){
224                 select.deselectByVisibleText(value[0]);
225             }else if (by.equals("*")){
226                 select.deselectAll();
227             }
228         }else{
229             Exception e = new Exception("The element is not SELECT Object");
230             throw e;
231         }
232     }
233
234     ///
235     ///判断下拉框是否为多选
236     ///
237     public boolean isMultiple() throws Exception
238     {
239         if (we.getTagName().equals("select")){
240             Select select = new Select(we);
241             if (select.isMultiple()){
242                 return true;
243             }else{
244                 return false;
245             }
246         }else{
247             Exception e = new Exception("The element is not SELECT Object");
248             throw e;
249         }
250     }
251
252     ///
253     ///获取select的当前选中值
254     ///
255     public String getSelectedText() throws Exception
256     {
257         if (we.getTagName().equals("select")){
258             String text = "";
259             Select select = new Select(we);
260             List<WebElement> options = select.getAllSelectedOptions();
261             for (WebElement w : options){
262                 text += w.getText() + "\r\n";
263             }
264             return text;
265         }else{
266             Exception e = new Exception("The element is not SELECT Object");
267             throw e;
268         }
269     }
270
271     ///
272     ///判断指定项是否存在
273     ///
274     public boolean isInclude(String name) throws Exception
275     {
276         if (we.getTagName().equals("select")){
277             Select select = new Select(we);
278             List<WebElement> options = select.getOptions();
279             for (WebElement w : options){
280                 if (w.getText().equals(name)){
281                     return true;
282                 }
283             }
284             return false;
285         }else{
286             Exception e = new Exception("The element is not SELECT Object");
287             throw e;
288         }
289     }
290
291     ///
292     ///获取元素的tagname
293     ///
294     public String getTagName(){
295         return we.getTagName();
296     }
297
298     ///
299     ///获取元素的id
300     ///
301     public String getId(){
302         return we.getId();
303     }
304
305     ///
306     ///获取元素的绝对位置
307     ///
308     public Point getLocation(){
309         return we.getLocation();
310     }
311
312     ///
313     ///获取元素的出现在屏幕可见区时的位置
314     ///
315     public Point getLocationOnScreenOnceScrolledIntoView(){
316         return we.getLocationOnScreenOnceScrolledIntoView();
317     }
318
319     ///
320     ///获取元素的坐标
321     ///
322     public Coordinates getCoordinates(){
323         return we.getCoordinates();
324     }
325
326     ///
327     ///获取元素的大小
328     ///
329     public Dimension getSize(){
330         return we.getSize();
331     }
332
333     ///
334     ///提交元素所在form的内容
335     ///
336     public void submit()
337     {
338         we.submit();
339     }
340
341     ///
342     ///勾选radio、checkbox
343     ///
344     public void check(String...values) throws Exception
345     {
346         if (we.getTagName().equals("input")){
347             if (we.getAttribute("type").equals("radio")){
348                 WebDriver wd = we.getWrappedDriver();
349                 List<WebElement> wl = wd.findElements(By.name(we.getAttribute("name")));
350                 if (values[0].equals("index")){
351                     wl.get(Integer.parseInt(values[1])).click();
352                 }else if (values[0].equals("value")){
353                     for (WebElement w : wl){
354                         if (w.getAttribute("value").equals(values[1])){
355                             w.click();
356                             break;
357                         }
358                     }
359                 }
360             }else if (we.getAttribute("type").equals("checkbox")){
361                 if (!we.isSelected()){
362                     we.click();
363                 }
364             }else{
365                 Exception e = new Exception("The element is not Radio or CheckBox Object");
366                 throw e;
367             }
368         }else{
369             Exception e = new Exception("The element is not INPUT Object");
370             throw e;
371         }
372     }
373
374     ///
375     ///取消勾选checkbox
376     ///
377     public void unCheck() throws Exception
378     {
379         if (we.getTagName().equals("input") && we.getAttribute("type").equals("checkbox")){
380                 if (we.isSelected()){
381                     we.click();
382                 }
383         }else{
384             Exception e = new Exception("The element is not CheckBox Object");
385             throw e;
386         }
387     }
388
389     ///
390     ///checkbox、radio是否勾选
391     ///
392     public boolean isChecked(String...values) throws Exception
393     {
394         if (we.getTagName().equals("input")){
395             if (we.getAttribute("type").equals("radio")){
396                 WebDriver wd = we.getWrappedDriver();
397                 List<WebElement> wl = wd.findElements(By.name(we.getAttribute("name")));
398                 if (values[0].equals("index")){
399                     return wl.get(Integer.parseInt(values[1])).isSelected();
400                 }else if (values[0].equals("value")){
401                     for (WebElement w : wl){
402                         if (w.getAttribute("value").equals(values[1])){
403                             return w.isSelected();
404                         }
405                     }
406                 }
407                 return false;
408             }else if (we.getAttribute("type").equals("checkbox")){
409                 return we.isSelected();
410             }else{
411                 Exception e = new Exception("The element is not Radio or CheckBox Object");
412                 throw e;
413             }
414         }else{
415             Exception e = new Exception("The element is not INPUT Object");
416             throw e;
417         }
418     }
419
420     ///
421     ///把元素滚动到可视区
422     ///
423     public void scroll()
424     {
425         this.focus();
426     }
427
428     ///
429     ///高亮元素
430     ///
431     public void highLight() throws InterruptedException
432     {
433         this.focus();
434         JavascriptExecutor js = getJSE();
435         String old_style = we.getAttribute("style");
436         for (int i = 0; i < 3; i++) {
437             js.executeScript("arguments[0].setAttribute('style', arguments[1]);", this.we, "background-color: red; border: 2px solid red;" + old_style);
438             Thread.sleep(500);
439             js.executeScript("arguments[0].setAttribute('style', arguments[1]);", this.we, old_style);
440             Thread.sleep(500);
441         }
442     }
443
444     ///
445     ///触发元素的特定事件
446     ///
447     public void fireEvent(String event){
448         JavascriptExecutor js = getJSE();
449         js.executeScript(String.format("arguments[0].%s()", event), this.we);
450     }
451
452     ///
453     ///使元素获取焦点
454     ///
455     public void focus(){
456 //        this.we.sendKeys("");
457         JavascriptExecutor js = getJSE();
458         js.executeScript("arguments[0].focus();", this.we);
459     }
460
461     ///
462     ///对元素执行JavaScript操作;即执行元素的dom操作
463     ///
464     public void executeJS(String commands){
465         JavascriptExecutor js = getJSE();
466         String[] comandArr = commands.split(";");
467         commands = "";
468         for (String comand : comandArr){
469             if (!comand.trim().equals("")){
470                 commands += String.format("arguments[0].%s;", comand);
471             }
472         }
473         if (!commands.equals("")){
474             js.executeScript(commands, this.we);
475         }
476     }
477
478     ///
479     ///获取原始的RemoteWebElement对象
480     ///
481     public RemoteWebElement getNativeWebElement(){
482         return this.we;
483     }
484
485     private JavascriptExecutor getJSE(){
486         if (this.isExist()){
487             if (this.jse == null){
488                 WebDriver wd = we.getWrappedDriver();
489                 this.jse = (JavascriptExecutor) wd;
490             }
491         }
492         return jse;
493     }
494
495     private String setBackground(String color){
496         JavascriptExecutor js = getJSE();
497         String old_bg = we.getCssValue("background-color");
498         js.executeScript("arguments[0].style.background = arguments[1];", this.we, color);
499         return old_bg;
500     }
501
502 }


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: