java - 是否可以从设备场中的 Playstore 安装应用程序?

标签 java android junit appium-android aws-device-farm

我正在使用 AppiumDriver 在 Amazon 设备场上安装 Android 应用程序。 我已经在真实设备中对此进行了测试,它工作得很好,但是当我当时将相同的代码放入 Device Farm 时,它需要工作。它想要打开 Play 商店应用程序并收到以下错误。

Unable to create a new remote session. Original error: connect timed out Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03' System info: host: 'ip-172-31-13-65', ip: '172.31.13.65', os.name: 'Linux', os.arch: 'amd64', os.version: '3.13.0-139-generic', java.version: '1.8.0_151' Driver info: driver.version: AndroidDriver Tests failed

请检查下面的代码。

@Before
public void setup() throws MalformedURLException {
    DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
    desiredCapabilities.setCapability(MobileCapabilityType.UDID, "FA8351A00767");
    desiredCapabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Google Pixel 2");
    desiredCapabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "9");
    desiredCapabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
    desiredCapabilities.setCapability(MobileCapabilityType.NO_RESET, true);
    driver = new AndroidDriver(new URL("http://0.0.0.0:4723/wd/hub"), desiredCapabilities);
    if (!isShopperAppAvailable()) {
        desiredCapabilities.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, "com.android.vending");
        desiredCapabilities.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY,
                "com.google.android.finsky.activities.MainActivity");
    } else {
        desiredCapabilities.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, "your application package");
        desiredCapabilities.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY,
                "your app's launcher activity");
    }
    driver = new AndroidDriver(new URL("http://0.0.0.0:4723/wd/hub"), desiredCapabilities);
 }

public boolean isShopperAppAvailable() {
    boolean isShopperAppAvailable = false;
    if (driver != null) {
        isShopperAppAvailable = driver.isAppInstalled("your application package");
    }
    return isShopperAppAvailable;
}

@Test
public void testGooglePlayApp() throws InterruptedException {
    if (!isShopperAppAvailable()) {
        String appName = "Search your application";
        driver.findElementById("com.android.vending:id/0_resource_name_obfuscated").click();
        Thread.sleep(500);
        driver.findElementByXPath(
                "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/androidx.drawerlayout.widget.DrawerLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.FrameLayout/android.view.ViewGroup/android.widget.LinearLayout/android.widget.EditText")
                .sendKeys(appName);
        Thread.sleep(500);
        driver.findElement(By.xpath(
                "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/androidx.drawerlayout.widget.DrawerLayout/android.widget.FrameLayout/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.support.v7.widget.RecyclerView/android.widget.LinearLayout"))
                .click();
        Thread.sleep(500);
        MobileElement installButton = (MobileElement) driver.findElementByXPath(
                "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/androidx.drawerlayout.widget.DrawerLayout/android.widget.FrameLayout/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.FrameLayout/android.support.v7.widget.RecyclerView/android.widget.FrameLayout[1]/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.Button");
        installButton.click();
        Thread.sleep(10000);
    } else {
        System.out.println("open your app and do something");
    }

}

@After
public void tearDown() {
    if (driver != null) {
        driver.quit();
    }
}

最佳答案

问题在于,您需要先将 Google 帐户安装到 Device Farm 设备上,然后才能从应用商店下载应用。我在这里开发了执行这两件事(安装帐户和下载应用程序)的示例代码:https://github.com/aristeia/GoogleAccountSignInScript 。请尝试一下并让我知道您的想法。

谢谢, 乔恩

关于java - 是否可以从设备场中的 Playstore 安装应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68063432/

相关文章:

java - Guava 缓存的预加载值

java - 为什么我得到预期的类、枚举和接口(interface)?

Android与房间表模型的双向数据绑定(bind)

android - 测试运行开始测试运行失败 : Unable to find instrumentation info for: ComponentInfo{ro. vst.test/android.test.InstrumentationTestRunner}

java - Spring - Web 应用程序的 Junit

java - 当 arraylist 包含对象时,如何使用 Junit/Java 测试 compareTo?

javascript - Ctrl+单击 Atom 编辑器中的函数名称并跳转到其中

Java Swing布局问题

android - 广播接收器在应用程序被杀死时不调用服务

java - 如何使用 JUnit/Ant 加载属性文件?