【问题标题】:running/controlling an emulator on remote server在远程服务器上运行/控制模拟器
【发布时间】:2019-06-20 08:07:19
【问题描述】:

我知道这个问题不适合 SO,但我无处可问,希望我能在 mods 关闭这个问题之前得到答案!

所以我每天都使用几个安卓应用程序,这非常耗时。 我想以某种方式自动化这个过程。

这个想法是在服务器上安装某种模拟器,并通过某种编程语言对该模拟器进行编程,以便在需要时在服务器上运行应用程序。

我是一名网络开发人员,我与 PHPnodejspython 合作, 对移动空间不是很熟悉,所以想在这里问一下。

有什么解决方案可以做我想做的事吗?我四处搜索,找到了Appium,但我不确定它是否能满足我的要求。

请注意,这些应用没有可供我使用的公共“api”。

此外,我只能通过“ssh 终端”远程访问服务器,因此具有“GUI”依赖性的解决方案对我不起作用。

【问题讨论】:

  • 您说他们没有公共 API,但他们可能有一些智能cookie逆向工程的私有API吗?示例:github.com/Jamonek/Robinhood
  • @Dylan 使用 fiddler 等工具很容易找到 api,但他们使用加密来发送和接收数据,如果不访问源代码几乎不可能找到加密方法

标签: android mobile appium


【解决方案1】:

您可以使用一些模拟器,例如 Bluestacks,然后运行脚本来运行应用程序,然后使用宏工具来模拟游戏或应用程序中的点击

查看此链接以获取 bluestacks 中的宏工具:https://www.bluestacks.com/blog/bluestacks-exclusives/combo-key-bluestacks-record-replay-action-single-key-en.html

或者您可以编写一个使用 adb 命令运行和控制应用程序的脚本。

例如。 运行应用程序。 adb shell am start -n com.android.settings/.Settings 此命令将在模拟器中打开设置应用程序。

发送你可以使用的触摸事件:adb shell input touch <x> <Y>

adb shell input keyevent <keycode> to send keycodes

【讨论】:

  • thanx,bluestacks 看起来很不错,但是它似乎需要一个 GUI 来运行,并且我通过 ssh 终端与远程服务器一起工作......我正在寻找一个可以通过编程激活/控制的解决方案代码不是图形界面
  • adb 似乎更适合我想要的东西,但我更喜欢 shell 脚本以外的东西......最好是 nodejs/js bcuz 它带来的灵活性,比如处理 http 请求、数据库、...... .
【解决方案2】:

我假设您想要自动化原生 Android 应用程序。

简短回答:Appium 将是您的理想解决方案。

在您的远程服务器上,您需要:

安装完所有东西后,您将能够在您的服务器上启动 Appium 节点并针对它们运行 Appium 脚本。

我建议使用选择的 CI 服务器来自动化这个过程。它应该使您通过 ssh 终端开始测试更容易/100% 自动化。

我从来没有在 python 中使用过 Selenium/Appium,所以我无法真正帮助您提供 Appium 测试代码示例,但我确信有很多关于 python 的基础教程。

【讨论】:

  • thanx,我打算使用 nodejs 而不是 python(如果可能的话),我对这个领域很陌生....我们可以在模拟器上保持应用程序打开并在一段时间内使用它吗?每次我们需要使用它时它都会打开应用程序?
  • 我很确定您可以将 Appium 配置为使用已经运行的应用程序,但我认为当您需要做某事时重新启动您的应用程序会更好地提高您的脚本稳定性。至于 python,它不适合你。 Appium 节点出于某种原因需要它(或者至少 appium-doctor 认为它需要它)。
【解决方案3】:

您必须在远程服务器中安装 AppiumServer 和 android sdk/simulator。我将展示如何在java中完成它。希望你能把它转换成javascript代码。

使用 ipconfig

检查远程服务器的 IP 地址

在远程服务器中启动你的 appium 服务器

>appium -a "ip address of remote server" -p 4732 --session-override

在远程服务器中启动模拟器。

在您的代码中定义和初始化 DesiredCapabilitiesAppiumDriver,如下所示。

AppiumDriver<MobileElement> driver;
DesiredCapabilities caps= new DesiredCapabilities();
caps.setCapability(MobileCapabilityType.DEVICE_NAME, "android device");
caps.setCapability(MobileCapabilityType.PLATFORM_NAME, MobilePlatform.ANDROID);
caps.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 300);
caps.setCapability(MobileCapabilityType.AUTOMATION_NAME, "uiautomator2");
caps.setCapability("appPackage", "enter your appPackage");
caps.setCapability("appActivity", "enter your appActivity");

driver= new AndroidDriver<MobileElement>(new URL("remote server ip address" + ":4732/wd/hub"), caps);

确保两台设备都在同一个网络中。 ping 远程服务器 IP 地址时必须得到响应

【讨论】:

    猜你喜欢
    • 2016-02-21
    • 2021-06-06
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 2017-04-03
    相关资源
    最近更新 更多