zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    [20191108]内核参数tcp_keepalive与sqlnet.ora expire_time的一些总结.txt
    [20191106]善用column格式化输出.txt
    [20191101]通过zsh计算sql语句的sql_id.txt
    [20191101]完善vim的bccalc插件8.txt
    [20191031]完善vim的bccalc插件7.txt
    [20191013]oracle number类型存储转化脚本.txt
    [20191012]组成rowid.txt
    文件下载中文问题
    关闭 macOS Google Chrome 黑暗模式风格
    删除最后一次提交
  • 原文地址:https://www.cnblogs.com/liu-ke/p/4300586.html
Copyright © 2011-2022 走看看