51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1824|回复: 1
打印 上一主题 下一主题

网页颜色分辨测试小游戏的JS化辨别及优化

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-4-28 11:13:52 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
相信大家都玩过一种网页游戏,通俗的可以叫颜色分辨测试游戏(这个名字对不对我也不知道,不要在意这
些细节),也就是下面截图这个玩意,一看就明白;细细把玩过一段时间,作为一个一百米开外男女不分的
弱视青年,每每过不了几关就挂了,对这个结局我也是异常无语,都怪当初学习太用功了(呵呵),


  这个游戏的流程就是页面上会出现不同颜色的格子,也就是div啦,点击颜色唯一的格子就算过关,然
后格子变多(max后不再变多),颜色变的相近,难度也就变大了,直到点错了或者倒计时结束了,很简单的
样子,作为前端人员后不犹豫的F12之,如下:



  就是这个结构啦,#box中一串span,其中有个span的style:background是唯一的,点击这个唯一的就
OK啦,于是我就顺其自然的想用脚本代替我逐个点击,没办法视力不行啊,还想省力,于是直接码之如下:

复制代码
  1. //取到所有background
  2. var stylelist = new Array();

  3. $("#box span").each(function() {
  4.     for(var i = 0; i < $("#box span").length; i++) {
  5.         stylelist[i] = $(this).attr("style");
  6.     }
  7. });
  8. //分割数组
  9. var s = stylelist.join(",") + ",",
  10.     copy;
  11. for(var i = 0; i < stylelist.length; i++) {
  12.     //取出唯一style
  13.     if(s.replace(stylelist[i] + ",", "").indexOf(stylelist[i] + ",") > -1) {
  14.         copy = stylelist[i];
  15.     }
  16. }
  17. //不解释了吧
  18. $("#box span").each(function() {
  19.     if($(this).attr("style") != copy)
  20.     $(this).click();
  21.     return;
  22. });
复制代码

复制代码
  然后上面的代码就可以代替手动点击了,很方便有木有,下面是我实测运行的结果:(如果有纯手点的
记录超过我这个的,请收下我的膝盖)





  168关,你没有看错,就是168,一分钟时间通过168关,而且中间有浏览器反应的缓慢时间,所以真实
的应该比这个还要高(开始有点理解游戏外挂了啊喂),但是这段代码太粗糙了(span少可以秒),效率很低,
这个后面会继续说;

  如果有人问,桥豆麻袋~你是怎么运行的,浏览器上运行?这就说明你很少用浏览器调试啊,方法如下:



  简单粗暴直接运行就行了,当然这也不是最优的选择,因为每次到新关卡(新页面)都要手动去运行,也
着实累手(回车键一脸委屈),可以考虑封装成浏览器插件,页面进来就自动运行了,省心省力~~

  接着上面所的效率说,来优化这段代码,之所以说这段代码粗糙,是因为它是遍历所有span,这里是不
多所以几乎是秒过,如果是span很多或者性能要求极致的大厂,这段代码是通不过的,优化的方案就是遍
历所有的span的style的时候,第一次遇到唯一style就操作了,比如有10000个格子,第十个就是不同的格
子,所以只要遍历到这里就结束了,而不是遍历10000,不然浏览器君表示扛不住啊。。。话不多说码之
如下:



复制代码
  1. var stylelist = new Array(),
  2.     copy;
  3. $("#box span").each(function() {
  4.     for(var i = 0; i < $("#box span").length; i++) {
  5.         stylelist[i] = $(this).attr("style");
  6.         //初始格子数大于2
  7.         for(var j=0;j<stylelist.length;j++){
  8.             if(stylelist.toString().replace(stylelist[j],"").indexOf(stylelist[j])>-1){
  9.                 copy = stylelist[j];
  10.             }
  11.             return;
  12.         }
  13.     }
  14. });
  15. //这里不知道还能不能优化,先mark一下
  16. $("#box span").each(function() {
  17.     if($(this).attr("style") != copy)
  18.     $(this).click();
  19.     return;
  20. });
复制代码


复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

  • TA的每日心情

    2019-12-27 13:32
  • 签到天数: 15 天

    连续签到: 1 天

    [LV.4]测试营长

    2#
    发表于 2018-5-3 19:12:01 | 只看该作者
    这个文章还是不错的
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-25 07:19 , Processed in 0.061556 second(s), 25 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表