`
nnwq
  • 浏览: 209096 次
社区版块
存档分类
最新评论

使用Selenium和openCV对HTML5 canvas游戏进行自动化功能测试(一)

 
阅读更多

上一篇讲了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是如何进行图像模板匹配的。 

1
2
分享到:
评论

相关推荐

    基于Python的Canvas画布元素定位在HolliView项目自动化测试中的应用.rar

    在HolliView项目的自动化测试中,使用Python进行Canvas画布元素定位是一种高效且灵活的方法。Canvas是HTML5中用于在网页上绘制图形的元素,它提供了丰富的API来创建动态、交互式的图形。Python则以其强大的库支持和...

    selenium2 python自动化测试 PDF学习

    Selenium,作为一个非常流行的自动化测试框架,支持多种浏览器和操作系统,可以用于自动化Web应用程序的测试。在Python环境中,Selenium与Python结合,可以快速实现Web自动化测试。以下知识点将围绕“Selenium2 ...

    selenium2 python自动化测试.pdf

    《Selenium2 Python自动化测试实战》是一本面向初级和中级测试工程师的指南,旨在教授如何使用Python和Selenium WebDriver进行Web自动化测试。这本书由一位热衷于技术实践和分享的作者编写,通过大量实例展示了如何...

    Selenium2自动化测试实战 基于Python语言

    《Selenium2自动化测试实战——基于Python语言》是一本针对软件测试工程师,尤其是对Web应用程序自动化测试感兴趣的读者的专业书籍。作者虫师在2016年10月编写了这本书,尽管时间已过去数年,但Selenium作为自动化...

    selenium+java+python自动化测试

    【标题】"selenium+java+python自动化测试" 涉及到的是使用Selenium这一强大的Web自动化测试工具,结合Java和Python两种编程语言进行网页自动化测试的方法和实践。Selenium是一个开源的测试框架,它允许开发人员模拟...

    selenium自动化测试实践——基于python语言

    本文介绍的是一本关于Selenium自动化测试的实践指南,它以Python语言为编程基础,提供了一系列自动化测试的实践技巧和实例。以下知识点将详细介绍书中所涉及的关键内容。 首先,了解Selenium。Selenium是一个用于...

    Selenium自动化测试

    Selenium自动化测试是一种非常流行和广泛使用的自动化测试工具,它主要被用于Web应用程序的测试。Selenium自动化测试可以通过模拟用户的操作来测试Web应用程序的功能,从而提高测试效率,确保软件的质量。 Selenium...

    使用selenium+OpenCV破解极验滑动/滑块验证码项目源码

    本项目演示了如何使用selenium+OpenCV破解极验的滑动/滑块验证码,本项目仅作为技术交流使用,禁止用于非法用途。

    基于opencv来破解豆瓣滑块验证登录源代码,使用selenium+opencv来实现豆瓣的自动化登录

    基于opencv来破解豆瓣滑块验证登录源代码,使用selenium+opencv来实现豆瓣的自动化登录 1.滑块验证码破解 1)-->定位背景图片,保存图片。 2)-->使用opencv对保存的图片进行缺口定位。 3)-->得到缺口偏移量...

    Python自动化测试实战篇(4)selenium+unttest+ddt实现自动化用例测试,模拟用户登陆点击交互测试

    在本篇Python自动化测试实战中,我们将探讨如何利用selenium、unittest和ddt库来构建一个功能完善的自动化测试框架,模拟用户登录、点击等交互行为,并通过assert进行断言检查,确保测试用例的准确性和覆盖率。...

    selenium自动化测试

    本主题将深入探讨如何使用 Selenium 进行自动化测试,特别是基于 Java 开发 API 并开启本地浏览器的实践。 一、Selenium 的核心组件 1. WebDriver:Selenium WebDriver 是一个 API,允许直接控制浏览器,执行用户...

    SELENIUM 2 自动化测试实战 基于PYTHON语言

    基于Python的Selenium测试框架,因其简洁易懂的语法和丰富的库支持,成为了自动化测试工程师的首选语言之一。 1. **Python 语言基础**:在使用Selenium进行自动化测试之前,熟悉Python的基本语法、数据类型、控制...

    全栈自动化测试实战 基于testng,httpclient,selenium.appium

    本书以testng、httpclient和selenium.appium为技术核心,详细介绍了如何进行端到端的自动化测试。下面将分别阐述这些工具在自动化测试中的作用及其相关知识点。 TestNG是一款强大的测试框架,它继承了JUnit的优点并...

    Java使用Selenium进行Web项目的UI自动化测试

    Java与Selenium结合使用进行Web项目的UI自动化测试,已经成为当下软件测试领域非常重要的技能之一。Selenium是一个用于Web应用程序测试的工具,它能够驱动浏览器进行各种操作,如点击、输入、提交表单等。通过Java...

    自动化功能测试 selenium

    通过本次实验,不仅加深了对Selenium及其组件的理解,还掌握了如何使用Selenium IDE进行基本的自动化测试。此外,还学会了如何利用编程语言编写更复杂的测试脚本。这些技能对于未来从事软件测试工作来说是非常有价值...

    selenium 2 python自动化测试实战.pdf

    selenium 2 python自动化测试实战这本书是由虫师所著,主要讲述的是如何使用selenium 2和python语言进行web自动化测试。selenium是一个用于Web应用程序测试的工具,而python是一种广泛使用的高级编程语言,两者结合...

    Selenium自动化测试:基于Python语言.azw3

    基于Python 的 Selenium WebDriver 入门知识、Selenium Python脚本、使用unittest 编写单元测试、生成HTML格式的测试报告、元素定位、Selenium Python API 介绍、元素等待机制、跨浏览器测试、移动端测试、编写一个...

    selenium自动化测试工具

    Selenium是一款强大的Web应用程序自动化测试工具,它支持多种编程语言,如Java、Python、C#等,使得测试人员和开发人员能够对网页进行自动化控制,从而实现高效且精确的测试。Selenium的核心理念是模拟真实用户的...

    selenium2自动化测试文档

    本文是一篇关于《selenium2python自动化测试实战》电子书的介绍与序言,作者通过回顾个人与自动化测试的渊源,分享了编写本书的初衷、过程以及对于学习自动化测试和Python+Selenium组合所持的态度。 知识点包括: ...

Global site tag (gtag.js) - Google Analytics