Skip to content

从模拟器获取第一张截图(core\Screenshot.py)

python
class Screenshot:
    def __init__(self, method, connection):
        self.connection = connection
        self.screenshot_instance = None
        self.init_screenshot_instance(method)

    def screenshot(self):
        image = self.screenshot_instance.screenshot()
        return image

    def init_screenshot_instance(self, method):
        if method == "nemu":
            self.screenshot_instance = NemuScreenshot(self.connection)
        elif method == "adb":
            self.screenshot_instance = AdbScreenshot(self.connection)
        elif method == "uiautomator2":
            self.screenshot_instance = U2Screenshot(self.connection)
        elif method == "scrcpy":
            self.screenshot_instance = ScrcpyScreenshot(self.connection)

这个类是BAAS源码中的Screenshot类的简化版本
初始化它需要两个参数:

  1. method 截图方式
    目前可选的截图方式以及其优劣
方式速度/ms无损截图
nemu5-20
adb300
uiautomator2300
scrcpy17

类似C++多态, init_screenshot_instance 根据 method 初始化 screenshot_instance 为对应的截图类, 使得 screenshot 函数可以直接调用对应截图类的 screenshot 函数
2. connection
这是另一个类(Connection)的实例,它告诉了类该从哪个模拟器截图 简述: Screenshot 类集成了多种截图方式 每一种截图方式的具体实现:

  1. nemu
  2. adb
  3. uiautomator2
  4. scrcpy