Java Selenium封装--RemoteWebElement

来源:互联网 发布:20式82毫米迫击炮数据 编辑:程序博客网 时间:2024/06/08 13:49
  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, JSONException169     {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     ///可选元素进行选中操作;如:select194     ///195     public void select(String by, String value) throws Exception196     {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 type214     ///215     public void deSelect(String by, String...value) throws Exception216     {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 Exception238     {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 Exception256     {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 Exception275     {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     ///获取元素的tagname293     ///294     public String getTagName(){295         return we.getTagName();296     }297     298     ///299     ///获取元素的id300     ///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、checkbox343     ///344     public void check(String...values) throws Exception345     {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     ///取消勾选checkbox376     ///377     public void unCheck() throws Exception378     {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 Exception393     {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 InterruptedException432     {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 }

 

0 0
原创粉丝点击