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的探索结束了,更多更好玩的玩法,会进一步更新
selenium 配合sikuli script操作高德地图的更多相关文章
- selenium WebDriver 操作高德地图
String URL="http://www.amap.com/"; WebDriver driver = new FirefoxDriver(profile); driver.g ...
- Windows Store Javascript项目使用高德地图、谷歌地图、百度地图API
原文 Windows Store Javascript项目使用高德地图.谷歌地图.百度地图API 在Win8 Store 项目中可以使用的地图主要有微软的Bing Map,目前高德地图sdk也支持Wi ...
- [WEB地图] 2017高德地图API WEB开发(key申请,地图搭建)简约教程
前端时间因为公司需要研究 了一下百度的教程 然后写个简约的笔记记录一下自己学习的收获,只为了满足自己暂时的写作热情 高德地图WEB开发(key申请.api)简约教程 1.首先我们需要去“高德地 ...
- web开发如何使用高德地图API(四)通过AMap.Marker自定义标点
说两句: 以下内容除了我自己写的部分,其他部分在高德开放平台都有(可点击外链访问). 我所整理的内容以实际项目为基础希望更有针对性的,更精简. 点击直奔主题. 准备工作: 首先,注册开发者账号,成为高 ...
- web开发如何使用高德地图API(三)点击热点打开信息窗体
说两句: 以下内容除了我自己写的部分,其他部分在高德开放平台都有(可点击外链访问). 我所整理的内容以实际项目为基础希望更有针对性的,更精简. 点击直奔主题. 准备工作: 首先,注册开发者账号,成为高 ...
- web开发如何使用高德地图API(二)结合输入提示和POI搜索插件
说两句: 以下内容除了我自己写的部分,其他部分在高德开放平台都有(可点击外链访问). 我所整理的内容以实际项目为基础希望更有针对性的,更精简. 点击直奔主题. 准备工作: 首先,注册开发者账号,成为高 ...
- web开发如何使用高德地图API(一)浏览器定位
说两句: 以下内容除了我自己写的部分,其他部分在高德开放平台都有(可点击外链访问). 我所整理的内容以实际项目为基础希望更有针对性的,更精简. 点击直奔主题. 准备工作: 首先,注册开发者账号,成为高 ...
- Unity与Android交互-Unity接入高德地图实现定位以及搜索周边的功能(使用Android Studio)详细操作
刚进公司给安排的任务就是Unity接入高德地图,算是踩了不少坑总算做出来了,抽点时间写个博客记录一下 废话不多说 先上效果图 获取定位并根据手机朝向显示周边信息 使用的Unity ...
- 基于高德地图的描点操作,监听地图缩放,展示合理数量的marker
原文:基于高德地图的描点操作,监听地图缩放,展示合理数量的marker 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/lx583274568/art ...
随机推荐
- BeanNameAware接口和BeanFactoryAware接口
迄今为止,所接触到的Bean都是“无知觉”的,就像黑客帝国中机械工厂里面“养殖”的人类,他们虽然能完成一定的功能,但是根本不知道自己在工厂(BeanFactory)中的代号(id),或者自己是在哪个工 ...
- Linux动态库的编译与使用 转载
http://hi.baidu.com/linuxlife/blog/item/0d3e302ae2384d3a5343c1b1.html Linux下的动态库以.so为后缀,我也是初次在Linux下 ...
- PHP中逻辑运算符and/or与||/&&的一个坑
我原来以为PHP中的and和&&是一样的, 只是写法上为了可读性和美观, 事实上我错了. 这里面深藏了一个坑! 看以下代码: $bA = true; $bB = false; $b1 ...
- C# Winform 脱离 Framework (一)
Linker是一个命令行工具,它以将我们的.net程序生成可脱离.net framework环境运行的程序 . Linker不支持中文的路径,在程序中也不能有中文的标识符. Linker 有2种部署方 ...
- Form表单中method为get和post的区别
序,form表单中的方法分为get和post,但你都知道他们之间的区别吗? Form表单中method为get和post的区别: 例子如下,有个Form表单. <form action=&quo ...
- ACM_1 大数求和
/*1 *2014.11.18 *大数求和 */ #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <strin ...
- Pro Mac 如何将英文文件夹汉化为中文
1.新建一个英文名的文件夹. 2.打开文本编辑,文本编辑 -> 预置 -> 新建文稿 -> 格式,选上纯文本,关闭预置. 3.新建了一个txt文件,在里面输入要汉化的英文名(刚才新建 ...
- lvs部署-DR模式
DR模式 角色 IP地址 备注 LVS负载均衡器 192.168.119.132 VIP:192.168.119.150 ipvsadm http_Real server 192.168.119 ...
- 迟来的Android的Camera开发总结
这是好久前写的项目,但一直没有去总结.刚好在准备找工作这段时间来总结自己做过的东西,学到的东西. 写Android的自定义的相机应用时,首先要知道一些Camera开发必须知道的尺寸,不然在调试的时候, ...
- MyEclipse自带maven找不到或自己外置安装
我用的MyEclipse2015 stable2.0版本. 1.删除相关SoftwareHelp --> choose components --> 进入后点 已安装的maven选项. 由 ...