• Java Selenium封装--RemoteWebDriver


      1 package com.selenium.driver;
      2 import java.io.File;
      3 import java.io.IOException;
      4 import java.net.URL;
      5 import java.util.HashMap;
      6 import java.util.Map;
      7 import java.util.Set;
      8 import java.util.regex.Matcher;
      9 import java.util.regex.Pattern;
     10 import org.apache.commons.io.FileUtils;
     11 import org.openqa.selenium.Alert;
     12 import org.openqa.selenium.Capabilities;
     13 import org.openqa.selenium.Cookie;
     14 import org.openqa.selenium.JavascriptExecutor;
     15 import org.openqa.selenium.NoSuchElementException;
     16 import org.openqa.selenium.OutputType;
     17 import org.openqa.selenium.TakesScreenshot;
     18 import org.openqa.selenium.WebDriver;
     19 import org.openqa.selenium.WebElement;
     20 import org.openqa.selenium.remote.Augmenter;
     21 import org.openqa.selenium.remote.RemoteWebDriver;
     22 import org.openqa.selenium.remote.RemoteWebElement;
     23 public class JSWebDriver{
     24     private RemoteWebDriver wd = null;
     25     private JavascriptExecutor jse = null;
     26     
     27     public JSWebDriver(URL remoteAddress, Capabilities desiredCapabilities) {
     28         wd = new RemoteWebDriver(remoteAddress, desiredCapabilities);
     29     }
     30     
     31     ///
     32     ///浏览器url导航
     33     ///
     34     public void goTo(String url){
     35         wd.get(url);
     36     }    
     37     
     38     ///
     39     ///浏览器退出
     40     ///
     41     public void quit(){
     42         wd.quit();
     43     }
     44 
     45     ///
     46     ///浏览器后退
     47     ///
     48     public void back(){
     49         wd.navigate().back();
     50     }
     51 
     52     ///
     53     ///浏览器前进
     54     ///
     55     public void forward(){
     56         wd.navigate().forward();
     57     }
     58     
     59     ///
     60     ///浏览器刷新
     61     ///
     62     public void refresh(){
     63         wd.navigate().refresh();
     64     }
     65     
     66     ///
     67     ///切换到新浏览器窗口;按照title、url、index;支持正则匹配
     68     ///
     69     public void switchToWindow(String by, String value, String...match) throws Exception{
     70         String currenthandle = wd.getWindowHandle();
     71         Set<String> handles = wd.getWindowHandles();
     72         int currentIndex = -1;
     73         String searchString = "";
     74         for(String handle : handles){
     75             currentIndex += 1;
     76             if(handle.equals(currenthandle)){
     77                 continue;
     78             }else{                
     79                 wd.switchTo().window(handle);
     80                 if (match.length == 1 && match[0].equals("regex")){                    
     81                     if (by.equals("title")){
     82                         searchString = wd.getTitle();
     83                     }else if (by.equals("url")){
     84                         searchString = wd.getCurrentUrl();
     85                     }    
     86                     Pattern pattern = Pattern.compile(value);
     87                     Matcher matcher = pattern.matcher(searchString);
     88                     if(matcher.find()){
     89                         return;
     90                     }
     91                 }else{
     92                     if (by.equals("title")){
     93                         searchString = wd.getTitle();
     94                     }else if (by.equals("url")){
     95                         searchString = wd.getCurrentUrl();
     96                     }else if (by.equals("index")){
     97                         searchString = Integer.toString(currentIndex);
     98                     }
     99                     if(searchString.equals(value)){
    100                         return;
    101                     }
    102                 }
    103             }
    104         }
    105         Exception e = new Exception("Swtich Window Failed, Please Make Sure The Locator Was Right.");
    106         throw e;
    107     }
    108     
    109     ///
    110     ///JS弹框确认
    111     ///
    112     public void clickAlertSure(){
    113         Alert alert = wd.switchTo().alert();
    114         alert.accept();
    115     }
    116     
    117     ///
    118     ///JS弹框取消
    119     ///
    120     public void clickAlertDismiss()
    121     {
    122         Alert alert = wd.switchTo().alert();
    123         alert.dismiss();
    124     }
    125     
    126     ///
    127     ///设置prompt弹框内容
    128     ///
    129     public void setPromptMessage(String parameter){
    130         Alert alert = wd.switchTo().alert();
    131         alert.sendKeys(parameter);
    132     }
    133     
    134     ///
    135     ///获取JS弹框内容
    136     ///
    137     public String getPromptMessage(){
    138         Alert alert = wd.switchTo().alert();
    139         return alert.getText();
    140     }    
    141     
    142     ///
    143     ///切换到Frame窗口;先定位到iframe元素
    144     ///
    145     public void switchToFrame(JSWebElement jselement){        
    146         wd.switchTo().frame(jselement.getNativeWebElement());
    147     }
    148 
    149     ///
    150     ///执行JS脚本
    151     ///
    152     public void executeScript(String parameter){
    153         JavascriptExecutor js = getJSE();
    154         js.executeScript(parameter);
    155     }
    156 
    157     ///
    158     ///获取指定cookie
    159     ///
    160     public String getCookie(String name){
    161         Cookie cookie=wd.manage().getCookieNamed(name);
    162         if (cookie == null){ return "null"; }
    163         return cookie.getValue();
    164     }
    165     
    166     ///
    167     ///获取所有cookie
    168     ///
    169     public Map<String, String> getCookies(){
    170         Map<String, String> newCookies = new HashMap<String, String>();
    171         Set<Cookie> cookies= wd.manage().getCookies();
    172         for (Cookie cookie : cookies){
    173             newCookies.put(cookie.getName(), cookie.getValue());
    174         }
    175         return newCookies;
    176     }
    177     
    178     ///
    179     ///截取屏幕
    180     ///
    181     public void getScreen(String filepath){
    182         WebDriver augmentedDriver = new Augmenter().augment(this.wd); 
    183         TakesScreenshot ts = (TakesScreenshot) augmentedDriver;
    184         File screenShotFile = ts.getScreenshotAs(OutputType.FILE); 
    185         try { 
    186             FileUtils.copyFile (screenShotFile, new File(filepath)); 
    187         }catch (IOException e){ 
    188             e.printStackTrace(); 
    189         } 
    190     }
    191 
    192     ///
    193     ///获取title
    194     ///
    195     public String getTitle(){
    196         return wd.getTitle();
    197     }    
    198 
    199     ///
    200     ///获取url
    201     ///
    202     public String getUrl(){
    203         return wd.getCurrentUrl();
    204     }
    205     
    206     ///
    207     ///获取HTML源码
    208     ///
    209     public String getSource(){
    210         try {
    211             Thread.sleep(500);
    212         } catch (InterruptedException e) {
    213             e.printStackTrace();
    214         }
    215         return wd.getPageSource();
    216     }
    217     
    218     ///
    219     ///滚动页面到指定位置
    220     ///
    221     public void scroll(String x, String y){
    222         if (x.equals("left")){
    223             x = "0";
    224         }else if (x.equals("right")){
    225             x = "document.body.scrollWidth";
    226         }else if (x.equals("middle")){
    227             x = "document.body.scrollWidth/2";
    228         }
    229         if (y.equals("top")){
    230             y = "0";
    231         }else if (y.equals("buttom")){
    232             y = "document.body.scrollHeight";
    233         }else if (y.equals("middle")){
    234             y = "document.body.scrollHeight/2";
    235         }
    236         this.executeScript(String.format("scroll(%s,%s);", x, y));
    237     }
    238     
    239     ///
    240     ///最大化浏览器
    241     ///
    242     public void maximize(){
    243         wd.manage().window().maximize();
    244     }
    245     
    246     public JSWebElement findElementById(String using) {
    247         try {
    248             return new JSWebElement((RemoteWebElement)wd.findElementById(using));
    249         }catch (NoSuchElementException e){
    250             return new JSWebElement();
    251         }
    252     }
    253     
    254     public JSWebElement findElementByCssSelector(String using) {
    255         try {
    256             return new JSWebElement((RemoteWebElement)wd.findElementByCssSelector(using));
    257         }catch (NoSuchElementException e){
    258             return new JSWebElement();
    259         }
    260     }
    261     
    262     public JSWebElement findElementByXPath(String using) {
    263         try {
    264             return new JSWebElement((RemoteWebElement)wd.findElementByXPath(using));
    265         }catch (NoSuchElementException e){
    266             return new JSWebElement();
    267         }
    268     }
    269 
    270     public JSWebElement findElementByLinkText(String using) {
    271         try {
    272             return new JSWebElement((RemoteWebElement)wd.findElementByLinkText(using));
    273         }catch (NoSuchElementException e){
    274             return new JSWebElement();
    275         }
    276     }
    277     
    278     public JSWebElement findElementByDom(String using) {
    279         try {
    280             JavascriptExecutor js = this.getJSE();
    281             WebElement we = (WebElement)js.executeScript(String.format("return %s", using));            
    282             return new JSWebElement((RemoteWebElement)we);
    283         }catch (NoSuchElementException e){
    284             return new JSWebElement();
    285         }
    286     }
    287     
    288     ///
    289     ///获取原生的RemoteWebdriver对象
    290     ///
    291     public RemoteWebDriver getNativeWebDriver(){
    292         return this.wd;
    293     }
    294     
    295     private JavascriptExecutor getJSE(){
    296         if (this.jse == null){
    297             this.jse = (JavascriptExecutor) this.wd;                
    298         }        
    299         return jse;
    300     }
    301 }
  • 相关阅读:
    Mvc分页:为IQueryable定义一个扩展方法,直接反回PagedList<T>结果集
    从零开始一起学习SLAM | 相机成像模型
    从零开始一起学习SLAM | 为啥需要李群与李代数?
    从零开始一起学习SLAM | 三维空间刚体的旋转
    从零开始一起学习SLAM | 为什么要用齐次坐标?
    从零开始一起学习SLAM | C++新特性要不要学?
    从零开始一起学习SLAM | SLAM有什么用?
    从零开始一起学习SLAM | 学习SLAM到底需要学什么?
    2019年度【计算机视觉&机器学习&人工智能】国际重要会议汇总
    从零开始一起学习SLAM | 为什么要学SLAM?
  • 原文地址:https://www.cnblogs.com/hushaojun/p/5985720.html
Copyright © 2020-2023  润新知