关于sap:使用-ABAP-控制-Android-原生应用

37次阅读

共计 5959 个字符,预计需要花费 15 分钟才能阅读完成。

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 的原创文章,尽在:” 汪子熙 ”:

正文完
 0