0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Android TV のアプリケーションをリモート操作する (Apptium 2)

Last updated at Posted at 2023-10-09

はじめに

Android TV OS上で動作するブラウザアプリケーションをリモート操作する方法を調査した。
Seleniumを利用してPC上のChromeを自動操作していた。同等の自動操作をAndroid上のブラウザアプリケーションに対しても実現したい。

調査結果

世の中には AndroidDriver や appium 1.x系のドキュメントが溢れている。appium2を明示して検索しないと欲しい情報にたどり着かない。

リモート操作方法

Appium2のインストール

$ npm i --location=global appium
$ pip install Appium-Python-Client
$ appium driver install uiautomator2

Aappium2のテスト

エラーが発生する場合は下記を参照

Appium2でウェブブラウザを起動するサンプルプログラム

AndroidTVで動作するChrome互換ブラウザをリモート操作してhttps://www.google.comを表示させる

remote_android.py
from appium import webdriver
from appium.options.android import UiAutomator2Options
import time

class RemoteTest:
	capabilities = dict(
		platformName='Android',
		automationName='UiAutomator2',
		deviceName='ADT-3',
		appPackage='<your browser application package name>',
		appActivity='<your application activity>',
		language='en',
		locale='US',
		noReset=True,#Falseだとインストール直後の初期状態にリセットされる
	)
	appium_server_url = 'http://localhost:4723'

	def __init__(self):
		capabilities_options = UiAutomator2Options().load_capabilities(self.capabilities)
		self.driver = webdriver.Remote(command_executor=self.appium_server_url, options=capabilities_options)

	def __del__(self):
		if self.driver:
			self.driver.quit()

	def start(self):
		self.driver.get("https://www.google.com")
		time.sleep(10)

if __name__ == '__main__':
	test = RemoteTest()
	test.start()

動作結果

Android TV をホストPC(Mac)に接続する

$ adb connect <IP ADDRESS>:5555
Macの場合
$ export ANDROID_HOME=${HOME}/Library/Android/sdk
$ appium
$ python3 ./remote_android.py

b.gif

知っておくと便利なこと

パッケージ名一覧

adb shell pm list packages

Activityを調べる

  • 実際にアプリを起動させてActivityを表示する
  • ログで filter を cmp=<アプリのパッケージ名> で検索
  • Activity名がわかる
    スクリーンショット 2023-10-09 21.38.40.png

解決に時間を要した内容

appium2 から /wd/hub は必要なくなった

appium だけで起動すれば良い --base-path /wd/hub などの指定は必要はない

$ appium

command_executor=の指定でも http://localhost:4723/wd/hub などの指定は必要なし

dummy program
appium_server_url = 'http://localhost:4723'
self.driver = webdriver.Remote(command_executor=self.appium_server_url, options=capabilities_options)

環境変数ANDROID_HOMEの設定

appiumサーバーを動作させるシェルで環境変数ANDROID_HOMEを設定する。
ANDROID_HOMEが未設定だとpythonプログラムとappiumサーバーの両方にログにエラーが表示される。appiumのシェルが裏に回っていたため、pythonプログラムのエラーログだけ気が付き、pythonプログラムを実行するシェルではANDROID_HOMEが設定されているはずなのに... と悩む羽目になった。

テストプログラムの問題

Official site の test.py で発生する不具合対策

AttributeError: 'NoneType' object has no attribute 'to_capabilities' 

Import Appium UiAutomator2 driver for Android platforms (AppiumOptions)
from appium.options.android import UiAutomator2Options
https://stackoverflow.com/questions/77118636/attributeerror-nonetype-object-has-no-attribute-to-capabilities-getting-th

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?