zoukankan      html  css  js  c++  java
  • Airtest之测试PC游戏

    前言

    在阅读本文之前,强烈希望大家回顾一下我们之前的教程--Airtest之测试Windows应用程序,了解如何在AirtestIDE中连接Windows窗口以及如何调用Windows操作的接口,这样将有助于大家对下文的内容进行理解。

     

     

    游戏专用指令

    1.key_press(key)key_release(key)

     一些PC游戏只接收来自底层硬件层面的发送的键盘扫描码,而不响应例如keyevent()所用的pywinauto库发送的操作系统层面的虚拟键码,所以我们提供了新的接口,key_press(key)key_release(key),来通过发送键盘扫描码进行键盘按键按下和释放的模拟。一些游戏要求在按键按下和释放之间进行一定的操作,因此我们将keyevent(...)拆分成了按下和释放两个步骤,这样做也比传入一个duration参数要更加精确。

    因为目前是Windows平台独有的接口,所以指令并没有放在公共API中。在使用时需要先获取设备,再调用方法来模拟对应的键盘操作。

    win = device()
    win.key_press('W')
    ... // some operations
    win.key_release('W')

    具体key_press(key)key_release(key)接受的参数key的类型可以在官方Windows平台api文档中查看。

    图片

    2. mouse_move(pos)mouse_down(button)mouse_up(button)

    一些3D游戏需要通过控制鼠标的移动来操作镜头,通过对鼠标按钮的点击和释放来进行包括射击在内的的一些操作。所以我们提取了原来swipe(...)touch(...)中的一些逻辑并封装成了三个新的指令,mouse_move(pos)mouse_down(button)mouse_up(button),来模拟鼠标的操作,这三个指令也可以在官方Windows平台api文档中查看。

    在一些对镜头移动要求十分严格的游戏中,例如需要鼠标移动来瞄准敌人进行射击,可能需要进行反复的调试或自己提供算法来确定pos这个参数具体的值。

    同样,在模拟一些鼠标的操作时,也需要先获取设备再模拟对应的鼠标操作。

    import win32api
    
    win = device()
    x, y = win32api.GetCursorPos()
    win.mouse_move((x+10, y+10))
    win.mouse_down('right')
    ...  // some operations
    win.mouse_up('right')

    一些常见的问题及解决办法

    1.一些游戏在使用窗口嵌入模式时会出现包括无法框选窗口或者画面消失在内的问题。如果窗口无法框选的话,可以尝试搜索窗口。

    如果连接窗口以后整个游戏窗口消失的话,可以选择无嵌入模式。

    如果仍旧无法连接窗口,可以尝试桌面模式。

    2.如果使用了桌面模式,并且你的脚本当中涉及到图像识别,那很有可能在跑脚本的过程中识别到脚本中的图像,而不是游戏画面当中的图像。此时可以右键单击脚本,选择图片/代码模式切换,将模式转换成代码模式,就能顺利运行脚本了。

    图片

    3.一些PC游戏对光标进行了限制,玩家无法将光标移出游戏画面以外。在编写脚本的时候,可以利用Tab+Alt的方式进行窗口切换。

    ---------------------------------------------------------------------------------

    关注微信公众号即可在手机上查阅,并可接收更多测试分享~

  • 相关阅读:
    51nod1711 平均数
    51nod1204 Parity
    51nod1274 最长递增路径
    51nod1403 有趣的堆栈
    51nod1364 最大字典序排列
    bzoj1857: [Scoi2010]传送带
    bzoj3224: Tyvj 1728 普通平衡树
    bzoj2396: 神奇的矩阵
    bzoj2428: [HAOI2006]均分数据
    splay入门
  • 原文地址:https://www.cnblogs.com/songzhenhua/p/15315155.html
Copyright © 2011-2022 走看看