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-------------------------------------------------------------------

这里有一个脚本来管制 Android 上的 Chrome 浏览器。 将其存储为蕴含在您的 SAP 零碎中。 它的作用与下面的脚本雷同,但在这里咱们管制浏览器。 咱们调用 Google 搜寻,在字段中输出 Selenium 一词,而后按 Enter。

#-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-------------------------------------------------------------------

ABAP Code Preparation and Execution

要应用以下报告执行这些脚本,您须要 SAP 零碎中来自此处的 zActiveXPoshV3 类。此报告加载蕴含 z_posh_appium_app 的第一个脚本并执行它。 但在应用新的空我的项目和虚构设施启动 Android Studio 之前。 而后启动你的 Appium 服务器。

report 源代码:

"-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-------------------------------------------------------------------

执行后果:

论断

如您所见,能够从 SAP 管制 Android 设施。 您能够通过脚本和 ABAP 报告、功能模块或办法之间的间接双向通信同步进行。 所以你能够在测试过程中应用这种办法,例如 在 eCATT 的背景下。这为十分乏味的集成场景关上了大门。

更多Jerry的原创文章,尽在:"汪子熙":