Androidアプリケーションを自動化する必要があります。Appiumを介して同じことをしています。Appiumサーバーを起動した後、アプリがエミュレーター4.4.2にインストールされます。 SDKにデフォルトで付属しているUIAutomatorviewerを使用している要素を検査しますが、アプリの要素を検査しているときにエラーが発生します![ここに画像の説明を入力してください] [1]
Error obtaining UI hierarchy
Reason:Error while obtaining UI hierarchy XML file.com.Android.ddmlb.SynchException.Remote object doesn't exist.
スクリプトを作成できるように要素を検査できるように解決策を見つけようとしましたが、無駄でした。
Uiautomatorビューアーで試した後、次の場合にのみエラーが発生することがわかりました。
appiumサーバーが実行されており、uiautomatorviewerを使用してスクリーンショットをキャプチャしようとします。
したがって、uiautomatorviewerを使用するときは、サーバーが停止状態にあることを確認してください。
次の方法を使用して同じ問題を修正しました。
(1)Androidデバイスを開発マシンに接続します。
(2)ターミナルのコマンドラインまたはWindowsのDOSコマンドラインに移動します。
(3)「adb Shell」を使用してAndroidデバイス;
(4)コマンドラインに「su root」と入力して、ユーザーをrootに変更します。
(5)「chmod 777/data/local/tmp」を入力して、アクセス権を/ data/local/tmpに変更します。
(6)uiautomatorviewerに戻って、スクリーンショットを再度実行すると、エラーが解消されます。
/ data/local/tmpに権利がない場合、アクセスできないファイルがあると思います。
画面上のすべてが静的であることを確認してください。また、入力カーソルの点滅も許可されていません。ペインティングアクションは、uiautomatorが現在のUIをダンプするのを停止します。
次のadbコマンドを使用してテストできます。
adb Shell uiautomator dump /data/local/tmp/uidump.xml
メッセージERROR: could not get idle state.
が表示され、あなたはこの問題に苦しんでいます。
DumpCommand
の87行目と101行目を参照してください。
try { ... uiAutomation.waitForIdle(1000, 1000 * 10); ... } catch (TimeoutException re) { System.err.println("ERROR: could not get idle state."); return; }
Appium Serverを停止します。その後、再試行してください。できます。
また、同じ問題が発生しました(Appium Serverが実行されていない場合も)。切り替え後、USBデバッグのOFF/ONが機能していました。
「adbd insecure」を使用したため、同じ問題が発生しました。だから私は「adbd insecure」を無効にして、uiautomatorviewerをリロードしました。
解決しました
マシンで実行中のAppium Serverを閉じて、再度開きました。後でuiautomaterを開き、それは私のために働いた
私はこの問題を解決するために一週間以上費やしました。デバイスを接続し、ASM 3.0を使用している場合、画面が投影されたら、UIAutomatorを開いて現在のAndroid画面をキャプチャします。 Appiumがなければ、キャプチャする必要があります。 Android SDKの代わりにAndroid Studioを使用します。 Android Studioをアンインストールして再インストールします。今では私にとって完璧に機能しています。
ルート化されたデバイスの場合:adbの開発者オプションでルートアクセスを有効にします。ルートとしてadbを再起動します
電話の「開発者オプション」でこれらを有効にしたかどうかを確認してください。
エラーを回避する方法:
アイドル状態を取得できませんでした。
Uiautomatorを使用して、uixとスクリーンショットを取得します。
public class DeviceMethods extends UiAutomatorTestCase {
public void dump(){
try {
getUiDevice().dumpWindowHierarchy("window_dump.uix") ;
getUiDevice().takeScreenshot(new File("/data/local/tmp/window_dump.png"));
} catch (Exception e) {
}
}
uiautomator jarを作成して/ data/local/tmpにプッシュする必要があります
このチュートリアル uiautomatorの使用方法を使用します
ファイルを取得したら、uiautomatorviewerでファイルを開きます
1)appium Serverを停止します
2)エミュレーターデバイスを開く
3)設定>開発者オプション>ビュー属性検査を有効にする
4)開発者向けオプションは非表示ですか?設定に移動>デバイス/電話についてをタップ>最後のオプション(ビルド番号)まで下にスクロール>連続して「ビルド番号」を7回タップ>トーストメッセージ「あなたは開発者です」が表示されます>その画面>設定に戻る>開発者向けオプションが表示されるはずですタップする>ビュー属性検査を有効にする
5)このエラーメッセージは表示されなくなります
これは、adbがポートを使用しており、appiumサーバーによってブロックされているために発生します。
これに最適なソリューションを見つけました
タスクバープロセスからadb.exeを強制終了し、uiautomatorviewerを再度起動してください
動作するのは次のパスです:
Android/Sdk/tools/bin/uiautomatorviewer
これを端末に貼り付けると、オートマトンが動作します
aPIレベルが17以上のデバイスまたはJelly Beanを使用する必要があります
私のために働いたもの:
アピウムをやめる
エミュレーターデバイスを開きます(Android 7.1.1でテスト済み)
設定>開発者オプション>ビュー属性検査を有効にする
OSに応じて、コンピューター、cmd、またはターミナルでシェルを開きます
次のコマンドを入力します。
adbシェル
su
cd/data
cd/local
chmod 777 tmp
uiautomatorviewerを起動します
xmlスクリーンショットを撮る
「su chmod 777/data/local/tmp」は機能しなかったので、ドリルダウンして機能しました。
デバイスがルート化されていない限り、物理デバイスではなくエミュレーターでこれを行う必要があると思います。 ¯\ _(ツ)_ /¯
ロッツァ・ラック!