• Java Selenium封装--RemoteWebElement


      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() + "
    ";
    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 }
  • 相关阅读:
    rest framework 认证 权限 频率
    rest framework 视图,路由
    rest framework 序列化
    10.3 Vue 路由系统
    10.4 Vue 父子传值
    10.2 Vue 环境安装
    10.1 ES6 的新增特性以及简单语法
    Django 跨域请求处理
    20190827 On Java8 第十四章 流式编程
    20190825 On Java8 第十三章 函数式编程
  • 原文地址:https://www.cnblogs.com/hushaojun/p/5985718.html
Copyright © 2020-2023  润新知