使用 ABAP 控制 Android 原生应用

简介: 使用 ABAP 控制 Android 原生应用
+关注继续查看

How to Control Native Android Apps with ABAP


业务流程不再仅在适用于 Windows 的 SAP GUI 中实现。 在其他设备上的其他 UI 上也越来越多地采取措施。 在这篇博文中,我描述了如何通过 PowerShell 使用 ABAP 在虚拟 Android 设备上控制本机应用程序和 Web 应用程序的可能性。


为了实现这个场景,我们使用这篇文章和这篇文章描述的方法。 SAP 系统和虚拟设备之间的桥梁构建了一系列库和应用程序。 它从 SAPIEN 的 ActiveXPoshV3 库开始,用于从 SAP 连接 PowerShell。 包含该过程的 PowerShell 脚本作为包含开发对象存储在 SAP 后端系统上。 ABAP 报告加载此脚本并执行它。 该脚本使用 Appium 客户端库连接 Appium 服务器,该服务器连接来自 Android Studio 的虚拟设备。


这里有一个 PowerShell 脚本来控制 Android 计算器应用程序。 将其存储为包含在您的 SAP 系统中。 它加载客户端库,设置必要的功能,如设备名称、应用程序等,并执行一些 activity. 它将 6 加到 9,将 166 乘以 9 并将结果写入屏幕。

#-Begin-----------------------------------------------------------------

 #-Includes------------------------------------------------------------

 $Path = "C:\Program Files\Appium"

 [Void][System.Reflection.Assembly]::LoadFrom($Path + "\appium-dotnet-driver.dll")

 [Void][System.Reflection.Assembly]::LoadFrom($Path + "\Castle.Core.dll")

 [Void][System.Reflection.Assembly]::LoadFrom($Path + "\Newtonsoft.Json.dll")

 [Void][System.Reflection.Assembly]::LoadFrom($Path + "\WebDriver.dll")

 [Void][System.Reflection.Assembly]::LoadFrom($Path + "\WebDriver.Support.dll")

 #-Sub Main------------------------------------------------------------

 Function Main() {

   

   [OpenQA.Selenium.Remote.DesiredCapabilities]$Capabilities = `

     [OpenQA.Selenium.Remote.DesiredCapabilities]::new();

   $Capabilities.SetCapability([OpenQA.Selenium.Appium.Enums.MobileCapabilityType]::`

     DeviceName, "emulator-5554");

   $Capabilities.SetCapability([OpenQA.Selenium.Appium.Enums.MobileCapabilityType]::`

     PlatformVersion, "8.1.0");

   $Capabilities.SetCapability([OpenQA.Selenium.Appium.Enums.MobileCapabilityType]::`

     PlatformName, "Android");

   $Capabilities.SetCapability([OpenQA.Selenium.Appium.Enums.AndroidMobileCapabilityType]::`

     AppPackage, "com.android.calculator2");

   $Capabilities.SetCapability([OpenQA.Selenium.Appium.Enums.AndroidMobileCapabilityType]::`

     AppActivity, "com.android.calculator2.Calculator");

   [System.Uri]$Uri = [System.Uri]::new("http://127.0.0.1:4723/wd/hub");

   $Driver = `

     [OpenQA.Selenium.Appium.Android.AndroidDriver[OpenQA.Selenium.Appium.AppiumWebElement]]::`

     new($Uri, $Capabilities);

   If ($Driver -eq $null) {

     Return;

   }

   $Driver.FindElementById("com.android.calculator2:id/digit_9").Click();

   $Driver.FindElementById("com.android.calculator2:id/op_add").Click();

   $Driver.FindElementById("com.android.calculator2:id/digit_6").Click();

   $Driver.FindElementById("com.android.calculator2:id/eq").Click();

   $Result = $Driver.FindElementById("com.android.calculator2:id/result").Text;

   Write-Host "Das Ergebnis ist " $Result;

   $Driver.FindElementByAccessibilityId("clear").Click();

   $Driver.FindElementById("com.android.calculator2:id/digit_1").Click();

   $Driver.FindElementById("com.android.calculator2:id/digit_6").Click();

   $Driver.FindElementById("com.android.calculator2:id/digit_6").Click();

   $Driver.FindElementByAccessibilityId("multiply").Click();

   $Driver.FindElementById("com.android.calculator2:id/digit_9").Click();

   $Driver.FindElementByAccessibilityId("equals").Click();

   $Result = $Driver.FindElementById("com.android.calculator2:id/result").Text;

   Write-Host "Das Ergebnis ist " $Result;

   $Driver.CloseApp();

   $Driver.Quit();

 }

 #-Main----------------------------------------------------------------

 Main

#-End-------------------------------------------------------------------image.png

#-Begin-----------------------------------------------------------------

 #-Includes------------------------------------------------------------

 $Path = "C:\Program Files\Appium"

 [Void][System.Reflection.Assembly]::LoadFrom($Path + "\appium-dotnet-driver.dll")

 [Void][System.Reflection.Assembly]::LoadFrom($Path + "\Castle.Core.dll")

 [Void][System.Reflection.Assembly]::LoadFrom($Path + "\Newtonsoft.Json.dll")

 [Void][System.Reflection.Assembly]::LoadFrom($Path + "\WebDriver.dll")

 [Void][System.Reflection.Assembly]::LoadFrom($Path + "\WebDriver.Support.dll")

 #-Sub Main------------------------------------------------------------

 Function Main() {

   

   [OpenQA.Selenium.Remote.DesiredCapabilities]$Capabilities = `

     [OpenQA.Selenium.Remote.DesiredCapabilities]::new();

   $Capabilities.SetCapability("deviceName", "emulator-5554");

   $Capabilities.SetCapability("platformVersion", "8.1.0");

   $Capabilities.SetCapability("browserName", "Chrome")

   $Capabilities.SetCapability("platformName", "Android");

   [System.Uri]$Uri = [System.Uri]::new("http://127.0.0.1:4723/wd/hub");

   $Driver = `

     [OpenQA.Selenium.Appium.Android.AndroidDriver[OpenQA.Selenium.Appium.AppiumWebElement]]::`

     new($Uri, $Capabilities);

   If ($Driver -eq $null) {

     Return;

   }

   $Driver.Navigate().GoToUrl("https://www.google.de");

   $Driver.FindElementByName("q").SendKeys("Selenium");

   $Driver.FindElementByName("q").SendKeys([OpenQA.Selenium.Keys]::Enter);

   

   Start-Sleep -Seconds 5

   $Driver.CloseApp();

   $Driver.Quit();

 }

 #-Main----------------------------------------------------------------

 Main

#-End-------------------------------------------------------------------image.png

ABAP Code Preparation and Execution

要使用以下报告执行这些脚本,您需要 SAP 系统中来自此处的 zActiveXPoshV3 类。此报告加载包含 z_posh_appium_app 的第一个脚本并执行它。 但在使用新的空项目和虚拟设备启动 Android Studio 之前。 然后启动你的 Appium 服务器。

image.png

"-Begin-----------------------------------------------------------------

REPORT Z_APPIUM.

DATA:

 lo_posh         TYPE REF TO zactivexposhv3,

 lv_pscode       TYPE string,

 lv_result       TYPE string,

 lt_result       TYPE STANDARD TABLE OF string

 .

CREATE OBJECT lo_posh.

CHECK lo_posh->load_lib( ) = lo_posh->mc_true.

CHECK lo_posh->get_is_powershell_installed( ) = lo_posh->mc_true.

CHECK lo_posh->init( iv_load_profiles = lo_posh->mc_false ) = 0.

lo_posh->set_outputmode( lo_posh->mc_outputbuffer ).

lo_posh->set_outputwidth( 132 ).

lo_posh->clear_output( ).

lv_pscode = lo_posh->read_incl_as_string( iv_incl_name = 'Z_POSH_APPIUM_APP' ).

lo_posh->execute( lv_pscode ).

lv_result = lo_posh->get_outputstring( ).

lo_posh->clear_output( ).

lt_result = lo_posh->outputstring_to_table( iv_outputstring = lv_result ).

LOOP AT lt_result INTO lv_result.

 WRITE: / lv_result.

ENDLOOP.

lo_posh->free_lib( ).

"-End-------------------------------------------------------------------image.pngimage.png

目录
相关文章
|
13天前
|
安全 前端开发 Android开发
鸿蒙开发|鸿蒙系统的介绍(为什么要学习鸿蒙开发|鸿蒙系统的官方定义|鸿蒙和安卓、ios的对比)
鸿蒙开发学习是一项探索性的工作,旨在开发一个全场景分布式操作系统,覆盖所有设备,让消费者能够更方便、更直观地使用各种设备。
54 0
鸿蒙开发|鸿蒙系统的介绍(为什么要学习鸿蒙开发|鸿蒙系统的官方定义|鸿蒙和安卓、ios的对比)
|
24天前
|
Linux Android开发 iOS开发
基于.Net开发的ChatGPT客户端,兼容Windows、IOS、安卓、MacOS、Linux
基于.Net开发的ChatGPT客户端,兼容Windows、IOS、安卓、MacOS、Linux
37 0
|
27天前
|
开发工具 数据库 Android开发
0001Java安卓程序设计-基于Android多餐厅点餐桌号后厨前台服务设计与开发2
0001Java安卓程序设计-基于Android多餐厅点餐桌号后厨前台服务设计与开发
9 0
|
Web App开发 移动开发 Android开发
快速查看Android原生应用中的H5页面
现在移动应用中内嵌webview的场景越来越多了,我们经常会有这样的需要,出于想要调试某个H5页面或者测试某个H5页面的性能,我们需要得到该页面的地址,但一时找不到负责这个页面的开发同学,今天就跟大家分享一下如何快速查看native应用中的H5页面地址。
525 0
快速查看Android原生应用中的H5页面
|
存储 Web App开发 Android开发
使用 ABAP 控制 Android 原生应用
使用 ABAP 控制 Android 原生应用
使用 ABAP 控制 Android 原生应用
|
JavaScript Linux Android开发
H5 Web App 的性能测试平台 : 使用 Frida 实现 AOP 拦截 hook Android 原生应用的方法
H5 Web App 的性能测试平台 : 使用 Frida 实现 AOP 拦截 hook Android 原生应用的方法 在做 App 上的 WebView 容器中的 H5 Web App 的性能测试平台的时候,用到了这个 Frida MIS (6).png 简单记录下。
1412 0
|
Android开发
Android系统原生应用解析之桌面闹钟及相关原理应用之时钟任务的应用(二)
这篇文章主要针对http://android.xsoftlab.net/training/scheduling/alarms.html#tradeoffs中的Scheduling Repeating Alarms一文进行大体翻译: Alarms(基于AlarmManager类)可以使你的应用在正常的生命周期之外执行基于时间的任务。
961 0
|
Android开发 监控 API
Android系统原生应用解析之桌面闹钟及相关原理应用之时钟任务的应用(一)
前段时间我一个朋友在面试回来问我:那个公司要5天之内完成一个项目,功能包括每天早上6点开始执行定时任务,大批量图片上传,大批量数据库同步。我心想,后两个功能还好说,可就是每天早上6点开始执行的这种定时任务如何搞定? 有了问题,自然要琢磨怎么解决,如果接触的知识面不够,或者没有系统的学习...
1425 0
|
存储 Linux 网络安全
Android中网络流量控制(防火墙)——Iptables
Iptables简介 iptables是与最新的 2.6.x 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。
1391 0
推荐文章
更多