appiumアプリケーションの「デバイス情報とデバイス操作の取得」(android)

8984 ワード

一、設備情報の取得
1.デバイスサイズの取得
  • driver.get_window_size()はデバイスの長さと高さを取得し、戻り値は辞書タイプ、key値はwidth、height
  • である.
    window_size = driver.get_window_size()
    print(window_size)      # {'width': 1080, 'height': 1920}
    

    2.デバイスコンテキスト情報の取得
  • driver.contextsはすべてのコンテキスト情報を取得し、戻り値はリストタイプ
  • である.
  • driver.contextは現在のコンテキストを取得し、文字列タイプ
  • を返す.
  • driver.current_contextは現在のコンテキストを取得し、文字列タイプ
  • を返す.
    #         
    all_contexts = driver.contexts
    print(all_contexts)         # ['NATIVE_APP']
    #        
    cur_context = driver.context
    print(cur_context)          # NATIVE_APP
    cur_context1 = driver.current_context
    print(cur_context1)         # NATIVE_APP
    

    3.現在のアプリケーションの情報を取得する
  • driver.current_Activity現在のアプリケーションのactivity情報
  • を取得する
  • driver.current_Packageは、現在のアプリケーションのpackage情報
  • を取得する.
    app_activity = driver.current_activity
    print(app_activity)         # .MainSettings
    app_package = driver.current_package
    print(app_package)          # com.android.settings
    

    二、設備操作
    1.activityが現れるのを待つ
  • driver.wait_Activity(activity,timeout,interval=1)はターゲットページが現れるのを待ち、設定時間内にターゲットページが現れると直接待機から飛び出し、同時にTrueに戻る.設定時間を超えてもターゲットページが表示されない場合は、False activity:ターゲットactivity timeout:タイムアウト時間設定、単位s interval:ループクエリの時間間隔、単位s、デフォルト1 sの目的に戻ります.主にいくつかのアプリケーションの起動時に使用されるインタフェースのactivityは、アプリケーションに入るインタフェースのactivityと一致しません.これにより、待機時間が存在しますが、この待機時間は毎回異なる場合があります.したがって、タイムアウトを設定して待つことができます.
  • #   10s             activity
    desired_caps = {'platformName': 'Android',
                    'platformVersion': '8.1',
                    'deviceName': 'XXX',
                    'automationName': 'Appium',
                    'noReset': 'true',
                    'unicodeKeyboard': 'true',
                    'resetKeyboard': 'true',
                    'appPackage': 'com.kugou.android',
                    'appActivity': '.app.splash.SplashActivity'
                    }
    driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps)
    is_target_activity = driver.wait_activity("com.kugou.common.useraccount.app.KgUserLoginAndRegActivity", 10)
    if is_target_activity is True:
        print("         ,         ")
    else:
        print("          ")
    

    2.機器操作を終了する
  • driver.quit()はデバイスを終了し、すべての関連ウィンドウを閉じます.

  • 3.androidキー操作
         keycode:
        KEYCODE_HOME(home ):3
        KEYCODE_BACK(back ):4
        KEYCODE_SEARCH(   ):84
        KEYCODE_ENTER(   ):66
        KEYCODE_MENU(   ):82
        KEYCODE_POWER(   ):26
        KEYCODE_NOTIFICATION(   ):83 
        KEYCODE_CALL(   ):5
        KEYCODE_ENDCALL(   ):6
        ...
    

    3.1. ボタンをクリック
  • driver.press_keycode(keycode, metastate=None, flags=None)
  • driver.keyevent(keycode, metastate=None)

  • 3.2. 長押しボタン
  • driver.long_press_keycode(self, keycode, metastate=None, flags=None)
  • #   home 
    driver.press_keycode(3)
    driver.keyevent(3)
    #   home 
    driver.long_press_keycode(3)
    

    4.アナログジェスチャークリックポイント操作
    4.1. tap関数の方法の紹介
  • driver.tap(positions,duration=None)シミュレーション指(最大5本の指をサポート)特定の位置をクリックし、一定時間positions:座標位置、リストリストリストタイプ、各オブジェクトはメタグループtupleタイプ(x,y)である.positions長さ、最小1、最大5、すなわちフォーマットは、[(x 1,y 1),(x 2,y 2),(x 3,y 3),(x 4,y 4),(x 5,y 5)].duration:持続時間、単位ms、デフォルトはNoneです.duration=Noneはクリック動作のみを実行することを示す.duration!=Noneは、長押しクリック動作を実行し、duration時間を維持してから解放することを示す.

  • 4.2. 要素座標の取得方法
    (1)要素のbounds値によりクリック座標を取得する:要素のbounds値フォーマットは[x 1,y 1][x 2,y 2],x 1とy 1は要素の左上隅位置,x 2とy 2は要素の右下隅位置である.ただしpositionsパラメータに値を付けるには、フォーマットを変更して[(x 1,y 1),(x 2,y 2)](2)要素座標を手動で取得マシンが「開発者オプション」に入り、「ポインタ位置」をオンにし、要素を手動でクリックして要素の座標を取得する必要があります.
    #         ,    500ms   
    driver.tap( [(204, 358), (790, 496)], 500)
    driver.press_keycode(4)
    driver.tap([(204, 358)], 500)
    driver.press_keycode(4)
    #       
    driver.tap([(204, 358), (790, 496)])
    driver.press_keycode(4)
    driver.tap([(204, 358)])
    

    5.スライド操作
    5.1. swipeとflick関数の方法の紹介
  • driver.swipe(start_x,start_y,end_x,end_y,duration=None)画面をある点から別の点start_x:スライド開始点のx軸座標start_y:スライド開始点のy軸座標end_x:スライド終了点のx軸座標end_y:スライド終了点のy軸座標duration:スライドの持続時間、単位ms
  • driver.flick(start_x,start_y,end_x,end_y)は、画面をある点から別の点
  • にすばやくスライドさせる.
    5.2. 説明
    画面全体または要素を左、右、上、下にスライドさせることができます.ある座標点から別の座標点にスライドすることもできます.テスト中にswipe関数へのスライド操作が絶えず使用されるため、画面または要素を左、右、上、下にスライドさせてカプセル化し、次回直接使用することができます.
    #       :           ,          
    window_size = driver.get_window_size()
    start_x = window_size['width'] * 0.5
    start_y = window_size['height'] * 0.75
    end_y = window_size['height'] * 0.25
    driver.swipe(start_x, start_y, start_x, end_y, 500)
    #       :          、     ,          
    element = driver.find_element_by_id("android:id/list")
    ele_rect = element.rect
    start_x1 = ele_rect['x'] + ele_rect['width'] * 0.5
    start_y1 = ele_rect['y'] + ele_rect['height'] * 0.75
    end_y2 = ele_rect['y'] + ele_rect['height'] * 0.25
    driver.swipe(start_x1, start_y1, start_x1, end_y2, 500)
    #              
    driver.swipe(500, 700, 500, 300, 500)
    #     
    driver.flick(start_x, start_y, start_x, end_y)
    

    6.app操作
    6.1. appのインストール、アンインストール、判断
  • driver.install_app(app_path,**options):app app_をインストールするpath:appをインストールするパス;**options:replace、timeout、allowTestPackages、useSdcard、grantPermissionsパラメータなどのappをインストールする他の設定パラメータ;replace:appがテストマシンにすでに存在する場合、再インストールするかどうかはデフォルトでTrueです.timeout:インストールの完了を待つ時間、デフォルトは60000 msです.allowTestPackages:インストールパッケージをテストとしてマークできるかどうか、デフォルトはFalseです.useSdcard:SDカードを使用してappをインストールするかどうか、デフォルトはFalseです.grantPermissions:インストールが完了した後、Android 6+のアプリケーション権限を自動的に付与するかどうか、デフォルトはFalseです.
  • driver.is_app_installed(bundle_id):appにbundle_がインストールされているかどうかを判断します.id:照会するアプリケーションのID情報は、packageで判断できる
  • .
  • driver.remove_app(app_id,**options):app app_をアンインストールid:アンインストールするアプリケーションのID情報**options:keepData、timeoutパラメータなどのappの他の設定パラメータをアンインストールします.keepData:appをアンインストールした後、アプリケーションデータとキャッシュを保持するかどうか、デフォルトはFalseです.timeout:アンインストールの完了を待つ時間、デフォルトは20000 msです.

  • 6.2. appバックグラウンド運転、起動、リセット、閉じる、終了操作
  • driver.launch_app()desired capabilitiesパラメータのアプリケーション
  • を起動
  • driver.close_app()desired capabilitiedパラメータで実行されるアプリケーション
  • を閉じる
  • driver.background_app(seconds)は、デバイスの現在のアプリケーションをバックグラウンドで実行し、secondsを秒後にフロントに戻してsecondsを実行します.バックグラウンドで実行する時間、単位s
  • です.
  • driver.reset()デバイスの現在のアプリケーションをリセットし、デフォルトの
  • にプログラムを復元します.
  • driver.terminate_app(app_id,**options)アプリケーションapp_idが実行中の場合、アプリケーションapp_を終了します.id:終了するアプリケーションのID情報**options:終了するアプリケーションのその他の設定パラメータ、例えばkeepData、timeoutパラメータ;timeout:待機時間のデフォルトは500 ms
  • です.
  • driver.start_Activity(app_package,app_activity,**opts)あるapp app_を起動するPackage:アプリケーションを起動するパッケージ名app_Activity:起動したactivity**opts:app_など、追加する必要があるパラメータwait_package、app_wait_activity、intent_action...... app_wait_package:アプリケーションのパッケージ名がapp_を表示するのを待つwait_Activity:アプリケーションを待つインタフェース
  • #   app
    driver.install_app("F:\\test.apk")
    #   app     
    is_installed = driver.is_app_installed("com.tencent.wstt.gt")
    print(is_installed)
    #   desired capabilities      
    driver.close_app()
    #   desired capabilities      
    driver.launch_app()
    #            
    driver.background_app(5)
    #          
    driver.reset()
    #     
    driver.remove_app("com.tencent.wstt.gt")
    #     
    driver.terminate_app("com.kugou.android")
    #       
    driver.start_activity("com.kugou.android", ".app.splash.SplashActivity")
    

    7.スクリーンショット操作
  • driver.get_screenshot_as_file(filename)filename:スクリーンショットを保存するパス+スクリーンショット名filenameがそうでない場合.pngの最後には、スクリーンショットも実行するが、警告メッセージがあるため、一般的に使用することを推奨する.pngの最後のスクリーンショット.スクリーンショットが成功すると、Trueが返されます.IOErrorエラーが発生した場合はFalseを返します.
  • filename = r"F:\test.png"
    driver.get_screenshot_as_file(filename)
    

    8.要素のスクロール操作
  • driver.scroll(origin_el,destination_el,duration=None)origin_el要素をdestination_にスクロールEl要素インタフェースは上下スライド:origin_Eleはdestination_el要素の上にある場合は、下にスクロールします.origin_Eleはdestination_el要素の下にある場合、元の要素はターゲット要素の位置にスクロールされます.画面が左右にスライド:origin_Eleはdestination_el要素の左側にある場合は、まず右スクロールを実行してから左スクロールを実行します.origin_Eleはdestination_el要素の右側の場合は、左にスクロールしてから右にスクロールします.注意:この2つの要素が現在のインタフェースに存在する必要があります.そうしないと、エラーが発生します.
  • ele1 = driver.find_element_by_xpath("//*[@text='  ']")
    ele2 = driver.find_element_by_xpath("//*[@text='WLAN']")
    driver.scroll(ele1, ele2)
    

    9.要素のドラッグ操作
  • driver.drag_and_drop(origin_el,destination_el)はorigin_el要素をdestination_にドラッグ&ドロップel要素位置注:デスクトップiconのドラッグ操作
  • など、ドラッグ操作をサポートする要素が必要です.
    ele1 = driver.find_element_by_xpath("//*[@content-desc='  ']")
    ele2 = driver.find_element_by_xpath("//*[@content-desc='    ']")
    driver.drag_and_drop(ele1, ele2)
    

    10.通知バーを開く操作
  • driver.open_notifications()