当前位置: 首页 > news >正文

selenium 配合sikuli script操作高德地图

 

      会不会使用工具,是一般QA和高级QA的区别 ---To be crazy

Java就是好,开源框架遍地都是,各种niubility的jar包,各种神器,真是不亦乐乎.

今天研究一下基于图片识别作为对象的niubility的sikuli框架。

MIT的研究人员设计了一种新颖的图形脚本语言Sikuli,计算机用户只须有最基本的编程技能(比如会写print"hello world"),

他不需要去写出一行行代码,而是用屏幕截图的方式,用截出来的图形元素组合出神奇的程序。 

简单了解一下:

  • 官网http://slides.sikuli.org/ 
  • API doc :http://nightly.sikuli.de/docs/index.html
  • sikuli可以用来测试Flash ,Android和IOS
  • 优缺点参考百度百科

         优点:

          1.可以测试不易识别的对象,比如map 和Flash

          2.可以验证图片

          3.通俗易懂,容易维护

        缺点:

           待续

  • 注意事项: 

             1. 只能识别当前屏幕的内容,如果操作对象被最小化,是无法识别的

             2. 第一次运行需要重启系统 ,虽然不make sense                    

下载:http://pan.baidu.com/s/1hq2CaHm

实例1.

       打开chrome,输入http://www.cnblogs.com/tobecrazy/ 并转到

首先你得分别准备截图

   

创建工程,把sikuli-script.jar添加进去

 代码如下:

import org.openqa.selenium.Keys;
import org.sikuli.basics.Debug;
import org.sikuli.script.FindFailed;
import org.sikuli.script.Key;
import org.sikuli.script.Pattern;
import org.sikuli.script.Screen;


public class NavigateToMyBlog {

    private static String URL="http://www.cnblogs.com/tobecrazy/";
    public static void main(String[] args) throws FindFailed, Exception {
        Debug.setDebugLevel(3);
        Screen screen=new Screen();
        Pattern chromeLogo=new Pattern("D:\\MyBlog\\chromeICO.png");
        screen.doubleClick(chromeLogo);
        Pattern maxButton=new Pattern("D:\\MyBlog\\maxButton.png");
        screen.click(maxButton);
        Pattern addressBar=new Pattern("D:\\MyBlog\\adressBar.png");
        screen.type(addressBar, URL);
        String keys=Keys.ENTER.toString();
        screen.keyDown(Key.ENTER);;
        
        

    }

}

实例二, 配合selenium webdriver 测试高德地图

1.打开地图

2.选择北京

3.打开地图的工具,选择测距

3.选择天安门

4.选择到这里去

5.选择输入并搜索,火车站

precondition:

截图呀:

Debug.setDebugLevel(3);
        Screen s = new Screen();
        String URL = "http://www.amap.com/";
        WebDriver driver = DriverFactory.getFirefoxDriver();
        Actions actions = new Actions(driver);
        driver.get(URL);
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
        driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
        WebElement chooseCityElement = driver.findElement(By
                .xpath("//div/span[@class='icon_expand cursor ml5']"));
        chooseCityElement.click();
        WebElement city_iframe = driver.findElement(By
                .xpath("//iframe[@id='city_iframe']"));
        driver.switchTo().frame(city_iframe);
        
        //选择北京
        WebElement BJ = driver.findElement(By.xpath("//div/a[text()='北京']"));
        BJ.click();
        
        //等待页面加载
        driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
        driver.switchTo().defaultContent();
        //打开工具 选择测距
        WebElement tools=driver.findElement(By.xpath("//div/span[text()='工具']"));
        actions.moveToElement(tools).click().perform();
        driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
        Pattern cj=new Pattern("D:\\MyBlog\\CJ.png");
        if(s.find(cj) != null)
        {
            s.click(cj);
        }
        Pattern bjbz=new Pattern("D:\\MyBlog\\BJBZ.png");
        s.click(bjbz);
        
        Pattern bjnz=new Pattern("D:\\MyBlog\\BJNZ.png");
        s.click(bjnz);
        
        s.rightClick();
        
        WebElement inputBoxElement = driver.findElement(By
                .xpath("//input[@id='keywordTxt']"));
        WebElement searchButton = driver.findElement(By
                .xpath("//input[starts-with(@class,'magnifier_button')]"));
        inputBoxElement.clear();
        inputBoxElement.sendKeys("天安门");
        searchButton.submit();
        driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
        WebElement tiAnMenElement = driver.findElement(By
                .xpath("//div[@title='天安门']"));
        tiAnMenElement.click();
        driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);

        WebElement comeToHereElement = driver.findElement(By
                .xpath("//div[@class='route']//li[text()='到这里去']"));
        comeToHereElement.click();

        WebElement setStartLocationElement = driver.findElement(By
                .xpath("//div/input[@class='route-input srh-ipt']"));
        setStartLocationElement.sendKeys("火车站");
        WebElement routeByBus = driver.findElement(By
                .xpath("//div[@id='rout-by-bus']"));
        routeByBus.click();
        driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
        WebElement startFrom = driver
                .findElement(By
                        .xpath("//div[@class='start_end_item_title' and contains(text(),'北京站')]"));
        
        actions.moveToElement(startFrom)
                .click(driver.findElement(By
                        .xpath("//a[contains(text(),'设为起点') and @data-name='北京站']")))
                .perform();
        driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);

        driver.findElement(By.xpath("//div[@class='amap-zoom-plus']")).click();
        

到此为止,selenium配合sikuli的探索结束了,更多更好玩的玩法,会进一步更新

 

相关文章:

  • HDUJ 1754 I Hate It
  • MapX bug 和设计缺陷
  • linux下svn命令大全
  • 《Play for Java》学习笔记(七)数据类型解析——Body parser
  • android alipay
  • 2014 BDTC 參会有感
  • [C#基础知识系列]专题十七:深入理解动态类型
  • 8天学通MongoDB——第四天 索引操作
  • 20个开源项目托管站点推荐
  • coursera 公开课 文本挖掘和分析(text mining and analytics) week 1 笔记
  • win7下使用Taste实现协同过滤算法
  • 设计模式 ( 十九 ) 模板方法模式Template method(类行为型)
  • 分享一款快速APP功能测试工具
  • R语言编程艺术#04#数据框(data.frame)
  • 动态规划(DP),0-1背包问题
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • Angular 2 DI - IoC DI - 1
  • Angular Elements 及其运作原理
  • CSS 三角实现
  • CSS 提示工具(Tooltip)
  • Date型的使用
  • django开发-定时任务的使用
  • ECS应用管理最佳实践
  • If…else
  • iOS编译提示和导航提示
  • JavaScript 基本功--面试宝典
  • ReactNative开发常用的三方模块
  • React的组件模式
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • Vue.js 移动端适配之 vw 解决方案
  • Vue.js-Day01
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • XForms - 更强大的Form
  • 阿里云应用高可用服务公测发布
  • 将回调地狱按在地上摩擦的Promise
  • 前端存储 - localStorage
  • 前端设计模式
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 新手搭建网站的主要流程
  • 追踪解析 FutureTask 源码
  • 最近的计划
  • Linux权限管理(week1_day5)--技术流ken
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • 昨天1024程序员节,我故意写了个死循环~
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #微信小程序:微信小程序常见的配置传旨
  • (12)目标检测_SSD基于pytorch搭建代码
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .jks文件(JAVA KeyStore)