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

Posted

技术标签:

【中文标题】是否可以从设备场中的 playstore 安装应用程序?【英文标题】:Is it possible to install application from playstore in device farm? 【发布时间】:2021-09-04 20:38:31 【问题描述】:

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

无法创建新的远程会话。原始错误:连接超时构建信息:版本:'3.141.59',修订:'e82be7d358',时间:'2018-11-14T08:17:03' 系统信息:主机:'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.version:AndroidDriver 测试失败

请检查下面的代码。

@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 Play。 【参考方案1】:

问题是您需要先将 Google 帐户安装到 Device Farm 设备上,然后才能从应用商店下载应用。我在此处开发了用于执行这两项操作(安装您的帐户和下载应用程序)的示例代码:https://forums.aws.amazon.com/thread.jspa?messageID=997193&#997193。请尝试一下,让我知道您的想法。

谢谢, 乔恩

【讨论】:

以上是关于是否可以从设备场中的 playstore 安装应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

我们可以在 aws 设备场中为 Android espresso 测试禁用一个对话框吗

Android 应用程序在设备上显示列表,但从 Playstore 下载时

无法从 PlayStore 为 Android 12 targetSDK 31 安装应用程序

无法读取 aws 设备场中的属性文件

从 Playstore 下载内部测试版时,Android 12 beta 5 应用链接不会自动验证

可以从生成的密钥中获取任何数据以在 Playstore 上上传应用程序吗?