def test_snapshot(self): for name, method in ScreenProxy.SCREEN_METHODS.items(): # 把所有的截图方法遍历一次,各截一次图片 cap_method = method(self.dev.adb) screen_proxy = ScreenProxy(cap_method) img = screen_proxy.snapshot() self.assertIsInstance(img, ndarray) screen_proxy.teardown_stream()
def screen_proxy(self): """ Similar to touch_proxy, it returns a proxy that can automatically initialize an available screenshot method, such as Minicap Afterwards, you only need to call ``self.screen_proxy.get_frame()`` to get the screenshot 类似touch_proxy,返回一个代理,能够自动初始化一个可用的屏幕截图方法,例如Minicap 后续只需要调用 ``self.screen_proxy.get_frame()``即可获取到屏幕截图 Returns: ScreenProxy(Minicap()) Examples: >>> dev = Android() >>> img = dev.screen_proxy.get_frame_from_stream() # dev.minicap.get_frame_from_stream() is deprecated """ if self._screen_proxy: return self._screen_proxy self._screen_proxy = ScreenProxy.auto_setup( self.adb, default_method=self._cap_method, rotation_watcher=self.rotation_watcher, display_id=self.display_id, ori_function=lambda: self.display_info) return self._screen_proxy
def screen_proxy(self, cap_method): """ Specify a screenshot method, if the method fails to initialize, try to use other methods instead 指定一个截图方法,如果该方法初始化失败,则尝试使用其他方法代替 Args: cap_method: "MINICAP" or :py:mod:`airtest.core.android.cap_methods.minicap.Minicap` object Returns: ScreenProxy object Raises: ScreenError when the connection fails Examples: >>> dev = Android() >>> dev.screen_proxy = "MINICAP" >>> from airtest.core.android.cap_methods.minicap import Minicap >>> minicap = Minicap(dev.adb, rotation_watcher=dev.rotation_watcher) >>> dev.screen_proxy = minicap """ if self._screen_proxy: self._screen_proxy.teardown_stream() self._screen_proxy = ScreenProxy.auto_setup(self.adb, default_method=cap_method)
def test_setup(self): # 测试默认的初始化 screen_proxy = ScreenProxy.auto_setup(self.dev.adb, rotation_watcher=self.dev.rotation_watcher, display_id=self.dev.display_id) self.assertIsNotNone(screen_proxy) screen_proxy.teardown_stream() # 测试指定默认类型初始化 default_screen = ScreenProxy.auto_setup(self.dev.adb, default_method="MINICAP") self.assertEqual(default_screen.method_name, "MINICAP") default_screen.teardown_stream() minicap = Minicap(self.dev.adb) default_screen2 = ScreenProxy.auto_setup(self.dev.adb, default_method=minicap) self.assertEqual(default_screen2.method_name, "MINICAP")
def test_custom_cap_method(self): """ Test adding a custom screenshot method 测试添加一个自定义的截图方法 Returns: """ from airtest.core.android.cap_methods.base_cap import BaseCap class TestCap(BaseCap): def get_frame_from_stream(self): return b"frame" ScreenProxy.register_method("TESTCAP", TestCap) # 默认优先初始化为自定义的TestCap cap = ScreenProxy.auto_setup(self.dev.adb) self.assertIsInstance(cap.screen_method, TestCap) ScreenProxy.SCREEN_METHODS.pop("TESTCAP")