前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java Selenium封装--RemoteWebElement

Java Selenium封装--RemoteWebElement

作者头像
流柯
发布2018-08-30 17:03:59
2.5K0
发布2018-08-30 17:03:59
举报
文章被收录于专栏:流柯技术学院流柯技术学院
代码语言:javascript
复制
  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 }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-02-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档