Selenium常用API及操作

1、获取Cookie

Set<Cookie> cookies = driver.manage().getCookies();

2、判断页面元素是否存在
public boolean isElement(By by){
           try{
                driver.findElement(by);
                return true;
           }
           catch(NoSuchElementException e){
                e.printStackTrace();
                return false;
           }
     }

3、对话框的处理
① 在处理对话框中输入字符
driver.switchTo().alert().sendKeys("这是输入对话框.........");

② 单击对话框的确定按钮
driver.switchTo().alert().accept();

4、模拟鼠标和键盘的操作
① 按下ctrl
Actions action = new Actions(driver);
action.keyDown(Keys.CONTROL);//按下CTRL键
action.keyUp(Keys.CONTROL);//释放CTRL键

②在某个元素下鼠标右键
Actions action = new Actions(driver);
action.contextClick(driver.findElement(By.id("kw"))).perform();

5、单选框和复选框的操作
思路:对于元素属性(id、name等)有一定规律的可通过下面这种方式进行循环遍历(代码一)
对于元素属性一致的,可通过driver.findElements(WebElement ele)获取元素集合(代码二)

  /**
   * 依次点击单选框
   */
  for(int i=1;i<=4;i++){
       driver.findElement(By.id("56483746999079_chk_"+i)).click();
       driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
   }

/**
 * 复选框的操作
 */
List<WebElement> checkboxs=driver.findElements(By.name("id"));
 /**
  * 遍历当前页面的复选框并依次勾选
  */
   for(int i=0;i<checkboxs.size();i++){
         checkboxs.get(i).click();
         // 检查复选框的勾选情况
         System.out.println(checkboxs.get(i).getAttribute("value")+
                       "是否勾选------------"+checkboxs.get(i).isSelected());
         System.out.println(checkboxs.get(i).getAttribute("value")+
                       "是否可编辑--------"+checkboxs.get(i).isEnabled());
    }           


6、Actions 鼠标悬停、下拉框的选择

测试场景:
               ① 打开百度首页,模拟鼠标悬停在右上角“设置”元素上,自动弹出下拉列表
               ② 点击下拉列表中的“高级搜索”,在弹出的页面中选择“时间”下拉框中的“最近一月”

实现 ① Actions 鼠标悬停

WebElement setting=driver.findElement(By.xpath(".//*[@id='u1']/a[8]"));
Actions action =new Actions(driver);
//鼠标移动到某个元素上
action.moveToElement(setting).perform();

实现 ② 下拉框的选择

            //点击自动弹出的下拉列表中的“高级搜索”
            driver.findElement(By.linkText("高级搜索")).click();
            driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
            /**
             * 选择时间中的“最近一月”
             * 通过gpc元素获取下拉框的集合,遍历这个集合,点击设定的那个
             */
            WebElement times=driver.findElement(By.name("gpc"));
            String timetext="最近一月";
            List<WebElement> dates=times.findElements(By.tagName("option"));
            for(int i=0;i<dates.size();i++){
                  System.out.println("开始遍历下拉列表"+(i+1)+":"+dates.get(i).getText());
                  if(dates.get(i).getText().equals(timetext)){
                        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
                        dates.get(i).click();
                        break;
                  }
            }


7、窗口操作

① 窗口的基本操作
Window window=driver.manage().window();
window.maximize();//窗口最大话
window.getSize().getWidth()   window.getSize().getHeight()//获取窗口尺寸
window.getPosition().getX()   window.getPosition().getY()//获取窗口位置

/**
 * 设置窗口的位置和大小
 */
window.setPosition(new Point(77, 77));
window.setSize(new Dimension(800,600));

② 多窗口处理

/**
 * 将窗口集合转换为数组
 */
String[] handlers=new String[driver.getWindowHandles().size()];
driver.getWindowHandles().toArray(handlers);
/**
 * 切换到第一个窗口
 */
WebDriver driver2=driver.switchTo().window(handlers[0]);

     /**
      * 处理多窗口的切换
      */
     public void switchWindow(){
           String currentwindow=driver.getWindowHandle();
           Set<String> handles=driver.getWindowHandles();
           Log4jTool.info(("当前窗口数量为:"+handles.size()));
           Iterator<String> iterator=handles.iterator();
           while(iterator.hasNext()){
                if(currentwindow==iterator.next()){
                     continue;
                }
                try{
                     driver.close();//关闭旧窗口
                     WebDriver window=driver.switchTo().window(iterator.next());//切换到新窗口
                     Log4jTool.info("成功切换到新窗口"+window.getTitle());
                }catch(Exception e){
                     Log4jTool.info("切换窗口失败"+e.getMessage());
                }
           }
     }

8、上传文件
driver.findElement(By.id("file")).sendKeys("C:\\Users\\ChangRyi\\Desktop"
           + "\\Selenium3\\截图文件\\2017_11_28_213339.jpg");
//点击上传
driver.findElement(By.id("filesubmit")).click();


9、精准对比截图
            /**
             * 两个文件进行像素比较的实现,获取文件像素大小,
             * 然后逐一比对,如果有任意一个像素不同则视为这两张截图不一致
             */
            try {
                  BufferedImage oldbufferedImage=ImageIO.read(oldfile);
                  DataBuffer oldDataBuffer=oldbufferedImage.getData().getDataBuffer();
                  int oldsize=oldDataBuffer.getSize();
                  BufferedImage newbufferedImage=ImageIO.read(newfile);
                  DataBuffer newDataBuffer=newbufferedImage.getData().getDataBuffer();
                  int newsize=newDataBuffer.getSize();
                  //截图是否一致标志
                  boolean iscomparison=true;
                  if(oldsize==newsize){
                        for(int i=0;i<oldsize;i++){
                              //如果像素对比不一致则标记iscomparison为false
                              if(oldDataBuffer.getElem(i)!=newDataBuffer.getElem(i)){
                                    iscomparison=false;
                                    break;
                              }
                        }
                  }else{
                        //如果像素大小不一致标记为false
                        iscomparison=false;
                  }
                  if(iscomparison)
                        System.out.println("两张图片对比一致!");
                  else
                        System.out.println("两张图片对比不一致!");
                  
                  //如果iscomparison为false则打印出提示信息
                  Assert.assertTrue(iscomparison,"测试过程中截图与期望截图不一致!");
                  
            } catch (IOException e) {
                  e.printStackTrace();
            }

10、对时间控件的处理

思路有二:
          ① 如果时间控件输入框为可编辑,则直接使用sendKeys输入时间
            dateElement.sendKeys("2017-12-03");

         ② 如果时间控件对应输入框为只读,则可以删除只读属性继续使用sendKeys输入
            

      /**
       * 删除某个元素属性值
       */
      public void removeAttribute(WebDriver driver,WebElement element,
                  String attributeName){
            JavascriptExecutor js=(JavascriptExecutor) driver;
            js.executeScript("arguments[0].removeAttribute(arguments[1],"
                        + "arguments[2])",element,attributeName);
      }

            //删除只可读属性
            removeAttribute(driver, dateElement, "readonly");
            dateElement.sendKeys("2017-12-03");


11、使用JavaScriptExecutor单击元素
/**
 * 使用js实现点击操作
 */
((JavascriptExecutor)driver).executeScript("arguments[0].click();", element);

12、Robot对象操作键盘

能够通过Robot对象操作键盘上的按键完成复制、粘贴、切换焦点、和回车等常用操作

      /**
       * 模拟Ctrl+V 将字符串进行粘贴
       */
      public void ctrlAndV(String character){
            StringSelection selection=new StringSelection(character);
            //将字符串放到剪贴板中
            Toolkit.getDefaultToolkit().getSystemClipboard().setContents(selection, null);
            Robot robot = null;
            try {
                  robot=new Robot();
            } catch (AWTException e) {
                  e.printStackTrace();
            }
            //按下Ctrl键
            robot.keyPress(KeyEvent.VK_CONTROL);
            //按下V键
            robot.keyPress(KeyEvent.VK_V);
            //释放V键
            robot.keyRelease(KeyEvent.VK_V);
            //释放Ctrl键
            robot.keyRelease(KeyEvent.VK_CONTROL);
      }






最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342