使用 ABAP 控制 Android 原生应用

举报
汪子熙 发表于 2022/09/02 12:22:02 2022/09/02
【摘要】 How to Control Native Android Apps with ABAP业务流程不再仅在适用于 Windows 的 SAP GUI 中实现。 在其他设备上的其他 UI 上也越来越多地采取措施。 在这篇博文中,我描述了如何通过 PowerShell 使用 ABAP 在虚拟 Android 设备上控制本机应用程序和 Web 应用程序的可能性。为了实现这个场景,我们使用这篇文章和这...

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 的背景下。这为非常有趣的集成场景打开了大门。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。