import base64 from pathlib import Path from appium import webdriver from appium.options.android import UiAutomator2Options from appium.webdriver.common.appiumby import AppiumBy APPIUM_SERVER = "http://127.0.0.1:4723" VIDEO = Path("videos/settings-apps.mp4") capabilities = { "platformName": "Android", "automationName": "UiAutomator2", "deviceName": "Android Emulator", "appPackage": "com.android.settings", "appActivity": ".Settings", "language": "en", "locale": "US", } VIDEO.parent.mkdir(exist_ok=True) driver = webdriver.Remote( APPIUM_SERVER, options=UiAutomator2Options().load_capabilities(capabilities), ) try: driver.start_recording_screen( timeLimit=60, videoSize="1280x720", bitRate=4000000, ) print(f"session={driver.session_id}") print("recording=started") driver.find_element(by=AppiumBy.XPATH, value='//*[@text="Apps"]').click() print("opened=Settings Apps") recording = driver.stop_recording_screen() video_bytes = base64.b64decode(recording) if b"ftyp" not in video_bytes[4:12]: raise RuntimeError("recording is not an MP4 file") VIDEO.write_bytes(video_bytes) if VIDEO.stat().st_size == 0: raise RuntimeError("recording is empty") print(f"saved={VIDEO}") print("format=MP4") print(f"bytes={VIDEO.stat().st_size}") finally: driver.quit()