上一篇讲了HTML5 canvas游戏的基本工作原理,接下来讲如何进行自动化功能测试。
Selenium是一个跨平台的跨浏览器的对网页进行自动化测试的工具。从Selenium 2.0开始Selenium就和WebDriver合体了。如果你还不了解Selenium怎么用,可以看看官网上的例子。Selenium支持各种语言的binding,方便起见,下面的测试脚本都用Python来写。
自动化功能测试用例流程基本上是这样的:启动浏览器 -> 打开游戏(网页)-> 对游戏图像进行模板匹配,确保UI元素显示正确 -> 模拟用户操作 -> 到下一场景 -> 继续模板匹配 -> 继续模拟操作 -> 关闭游戏(网页)以及浏览器。如果发现问题,就意味着测试用例失败,需要报告问题。
假如我想测试一个HTML5 canvas游戏,那么首当其冲就是要找它的canvas标签了。Selenium支持各种查找方法:
- find_element()
- find_element_by_id()
- find_element_by_name()
- find_element_by_tag_name ()
- find_element_by_css_selector()
- find_element_by_link_text()
- find_element_by_partial_link_text()
- find_element_by_xpath()
挑个最容易的吧: canvas = browser.find_element_by_xpath("//canvas")
那么我怎样获得canvas中的图像呢?有两种办法。一种是通过canvas.toDataURL():
var strData = canvas.toDataURL('image/png');
这种方法返回一个代表整个图像的Base64字符串。看上去就像:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO 9TXL0Y4OHwAAAABJRU5ErkJggg==" (如果你知道怎么解码,就能发现这个字符串表示了一个小圆红点点。)
另一种方法是使用context.getImageData():
var dataObj= context.getImageData(x, y, w, h);
返回一个对象包含RGBA字节缓存。
后者比前者要快很多,并且可以指定裁剪区域,推荐用后者。
不过这两者都是Javascript调用,如何和Selenium的Python脚本联系起来呢?
幸运的是Selenium支持直接调用Javascript:
def getClippedImageFromCanvas(browser, canvas, x, y, w, h): '''Get a clipped image from canvas using context.getImageData.''' data = browser.execute_script("\ var canvas= arguments[0];\ var x=arguments[1];\ var y=arguments[2];\ var w=arguments[3];\ var h=arguments[4];\ var context = canvas.getContext('2d');\ var dataObj= context.getImageData(x, y, w, h);\ var data = dataObj.data;\ return data;" ,canvas, x, y, w, h) data_bytes = array.array('B', data).tostring() im = Image.fromstring("RGBA", (w, h), data_bytes) return im
这样我们就获得了可以用于Python脚本的图像。接下去需要做的就是对图像进行模板匹配,比如看看预期的UI元素是否出现在正确的位置。这个工作可以由openCV完成。
除了图像识别,我们还需要模拟用户操作,如鼠标点击:
webdriver.ActionChains(browser).move_to_element_with_offset(canvas, x, y).click().perform()
Selenium/Webdriver支持链式操作,很cool。
下一篇会讲一下openCV是如何进行图像模板匹配的。
相关推荐
从 2013 年开始用 Python 和 Selenium 进行自动化测试的实践,其间的过程颇为艰辛,除了官方文档,相关 的资料并不算太多,尤其是中文资料;相比较而言 Java 和 Selenium 网上的资料要更多一些,这其中主要的原因 是...
本项目演示了如何使用selenium+OpenCV破解极验的滑动/滑块验证码,本项目仅作为技术交流使用,禁止用于非法用途。
基于Python 的 Selenium WebDriver 入门知识、Selenium Python脚本、使用unittest 编写单元测试、生成HTML格式的测试报告、元素定位、Selenium Python API 介绍、元素等待机制、跨浏览器测试、移动端测试、编写一个...
selenium2 python自动化测试 PDF学习 本PDF可以学习到如何进行Web自动化测试以多线程运行测试集,自动生成测试报告,最后完成后发送邮件等功能。
零成本实现Web功能自动化测试 基于Eclipse+Python+Selenium自动化测试技术
selenium+java+python自动化测试,下载查看即可shiyong
使用 Selenium 和在浏览器中运行测试还有很多其他好处。下面是主要的两大好处: • 通过编写模仿用户操作的 Selenium 测试脚本,可以从终端用户的角度来测试应用程序。 • 通过在不同浏览器中运行测试,更容易发现...
软件测试丛书 Selenium自动化测试指南,欢迎下载,1111
联通支付注册-滑动验证-selenium+Opencv 自动化测试程序-pc端 应用条件: 1 本地要加载 Open cv 插件才能运行, 2 seleinem 依赖部分 本代码为主要程序 应用基础: 熟悉 seleinem 及 Open cv应用环境能力的人, 仅...
Python自动化测试实战篇(4)selenium+unttest+ddt实现自动化用例测试,模拟用户登陆点击交互测试,Assert捕获断言多种断言
1. Web 应用程序自动化测试:使用 Selenium 和 Chromedriver,可以模拟用户行为来自动化测试 Web 应用程序。 2. 数据爬虫:使用 Selenium 和 Chromedriver,可以爬取 Web 应用程序中的数据。 3. Continuous ...
通过使用 Selenium 对 Flex 程序进行自动化测试,我们可以提高测试的效率和准确性,并且可以减少测试时间和成本。 知识点: * Selenium 是一个自动化测试工具,可以模拟用户的行为来测试 Web 应用程序。 * Flex 是...
Selenium 是一个功能强大且流行的自动化测试工具,广泛应用于 Web 应用程序的自动化测试中。下面是 Selenium 终极自动化测试环境搭建的详细步骤: 一、安装 JDK JDK 是 Java 开发工具包的缩写,Selenium 需要 JDK ...
试读 Selenium 2自动化测试实战 基于Python语言 企业批量购书 分享 关注商品举报 Selenium 2自动化测试实战 基于Python语言 这不仅是一本Selenium2自动化测试书,同时还是一本实用的Python基础编程书
基于selenium自动化测试,java开发API,java开启本地浏览器
Python 通过Selenium浏览器自动化测试框架获取HTML代码中的可用数据 Python源码Python 通过Selenium浏览器自动化测试框架获取HTML代码中的可用数据 Python源码Python 通过Selenium浏览器自动化测试框架获取HTML代码...
Selenium自动化测试培训 Selenium自动化测试工具应用 Selenium自动化测试脚本设计 Selenium自动化测试框架设计
selenium2 python自动化测试.pdf
selenium + python的自动化测试书籍,高清版,适合软件自动化测试人员,由浅入深,代码实例丰富,对自学者很有帮助
1、增加报告加载样式初始化,更多样化 2、将失败&错误拆分成失败和错误 3、对标签切换方法进行了优化