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的探索结束了,更多更好玩的玩法,会进一步更新

时间: 2024-10-03 23:04:28

selenium 配合sikuli script操作高德地图的相关文章

selenium WebDriver 操作高德地图

String URL="http://www.amap.com/"; WebDriver driver = new FirefoxDriver(profile); driver.get(URL); driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); driver.manage().timeouts().pageLoadTimeout(3

2017高德地图API WEB开发(key申请,地图搭建)简约教程

前端时间因为公司需要研究 了一下百度的教程 然后写个简约的笔记记录一下自己学习的收获,只为了满足自己暂时的写作热情 高德地图WEB开发(key申请.api)简约教程 1.首先我们需要去"高德地图开发平台" 通过"百度搜索 "或者"谷歌搜索 " 高德地图然后会有一个高德开发平台|高德地图apl 2.登录高德开发平台 这是高德开发平台的官网,然后点击登录,没有注册就好 3.进入控制台创建新应用 进入控制台之后选择"应用管理"然后点

Unity与Android交互-Unity接入高德地图实现定位以及搜索周边的功能(使用Android Studio)详细操作

刚进公司给安排的任务就是Unity接入高德地图,算是踩了不少坑总算做出来了,抽点时间写个博客记录一下 废话不多说 先上效果图 获取定位并根据手机朝向显示周边信息            使用的Unity版本为5.5,Androad Studio 2.3.1 接下来开始讲具体操作 首先是Androad Studio的基本配置 1.创建工程,空白的就行,反正也用不到界面布局 等待创建完成 2.新建库模块: 切换到Project视图 右击你的项目 新建一个库模块-用来负责与Unity交互 当然你也可以不

【高德地图API】从零开始学高德JS API(七)——定位方式大揭秘

摘要:关于定位,分为GPS定位和网络定位2种.GPS定位,精度较高,可达到10米,但室内不可用,且超级费电.网络定位,分为wifi定位和基站定位,都是通过获取wifi或者基站信息,然后查询对应的wifi或者基站位置数据库,得到的定位地点.定位数据库可以不断完善不断补充,所以,越定位越准确.本文详细描述了,如果使用高德JS API来实现位置定位.城市定位的方法,包含了IP定位,浏览器定位,检索定位等多种网络定位方法.当然,如果您的手机有GPS功能,那么使用浏览器定位的时候,会自动获取GPS信息,使

selenium和sikuliX配合使用操作网页

sikuli的官网地址:http://www.sikuli.org 首先下载sikuliX的jar包:https://launchpad.net/sikuli/sikulix/1.1.0 java-doc:http://nightly.sikuli.de/docs/index.html 官网用法介绍:http://www.sikulix.com/quickstart.html 需求: 1.打开百度地图 2.切换城市到郑州 3.使用测距工具 4.测量绿城公园--郑州植物园的距离 前序工作: 1.导

高德地图基础设置

1.引用高德地图 <!DOCTYPE HTML> <html> <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" > <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <titl

让isis支持高德地图

概述 由于项目需要用到地图,虽然isis的插件库里有个现成的地图实现,不过用的google地图,虽然google地图可以不用注册Appkey,但完全打不开.所以打算改成国产地图. 效果 先看下运行效果. 列表中的效果: 整体效果: 详细效果: 实现思路 高德地图的API跟Google地图类似,编程模型也相同,甚至很多类的命名都一样的.所以,从Google迁到高德还是比较容易的. 高德跟Google一样,用一个DIV来渲染地图.根据Vicket的编程方式,这个Div使用一个组件来表示,这个组件包含

【高德地图API】从零开始学高德JS API(一)地图展现

摘要:关于地图的显示,我想大家最关心的就是麻点图,自定义底图的解决方案了吧.在过去,marker大于500之后,浏览器开始逐渐卡死,大家都开始寻找解决方案,比如聚合marker啊,比如麻点图啊.聚合marker里面还有一些复杂的算法,而麻点图,最让大家头疼的,就是如何生成麻点图,如何切图,如何把图片贴到地图上,还有如何定位图片的位置吧.以前那么复杂的一系列操作,居然让云图的可视化操作一下子解决了.现在只要点一点鼠标,麻点图就自动生成了.真是广大LBS开发者的福音. 以前写过从零开始学百度地图AP

高德地图API笔记

一.图层类 1 二.调用高德地图 2 三.点标注 2 3.1使用自定义maker标注 2 3.2 Icon参数详情 3 3.3在地图上画圆 3 四.区域搜索 4 4.1 画边界函数 5 五.高德地图服务插件 6 5.1地点搜素 7 六. 海量点 8 一.图层类 var layerName = new AMap.TileLayer.类名 layerName.setMap(map); 类名     说明 TileLayer     切片图层类 TileLayer.Satellite  卫星图层类,继