Java Appium 测试无法在 AWS Device Farm 上运行

标签 java android maven amazon-web-services

我有Java语言的Appium脚本,由Appium Insecptor记录。

我的脚本将只执行 5 个步骤:

  1. 点击用户名字段

  2. 输入用户名

  3. 点击密码字段

  4. 输入密码

  5. 点击登录按钮

我想在 AWS Device Farm 上运行我的脚本。

我确实遵循了document AWS Device Farm 修改我的 pom.xml 文件,使用 Maven 包 mvn clean package -Dskiptests=true 进行打包,最后上传 zip-with- dependency.zip 到 AWS Device Farm。

但是我的测试未能运行。 这是结果截图

Screenshot of my result 1 Screenshot of my result 2

我不知道我在哪里犯了错误,导致 AWS 无法运行我的脚本。

这是我记录的,

package com.hostname.myapp;

import io.appium.java_client.AppiumDriver;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.By;


public class AppiumTest {

    private static AppiumDriver<AndroidElement> wd;

    @BeforeClass
    public static void setUpClass() throws MalformedURLException {

        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("appium-version", "1.0");
        capabilities.setCapability("platformName", "Android");
        capabilities.setCapability("platformVersion", "5.0.2");
        capabilities.setCapability("deviceName", "XXXXXXXXXXXX");
        capabilities.setCapability("app", "/Users/X/X.apk");
        capabilities.setCapability("appPackage", "com.hostname.myapp");
        wd = new AndroidDriver<AndroidElement>(new URL("http://0.0.0.0:4723/wd/hub"), capabilities);
        wd.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
    }

    @AfterClass
    public static void tearDownClass() {
        if (wd != null) {
            wd.quit();
        }
    }

    @Test
    public void test() throws IOException {
        wd.findElement(By.xpath("android.widget.EditText[1]")).click();
        wd.findElement(By.xpath("android.widget.EditText[1]")).sendKeys("username");
        wd.findElement(By.xpath("android.widget.EditText[2]")).click();
        wd.findElement(By.name("Android.widget.EditText[2]")).sendKeys("password");
        wd.findElement(By.xpath("android.widget.Button[1]")).click();
        wd.close();
    } 

最佳答案

我在 AWS Device Farm 团队工作。

感谢您提供详细信息。这有帮助。

解决方案

  1. 所需功能:设备场会忽略您已使用的所需功能。由于您在设备场中单独上传应用程序并在安排运行时选择设备,因此您在代码中使用的设备类型、名称和其他功能将不会得到尊重,并且依赖于它的任何代码很可能都将无法工作。 创建一个空的所需功能对象并将其传递给 AndroidDriver 构造函数将是实现此目的的理想方法。

  2. Android 驱动程序:您使用的代码

    wd = new AndroidDriver<AndroidElement>(new URL("http://0.0.0.0:4723/wd/hub"), capabilities);

    应该是

    wd = new AndroidDriver<AndroidElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);

  3. 视频:我们为 iOS 和 Android 提供视频录制功能。当测试失败时,如果有该次运行的视频,将会有很大帮助。您可以在"file"选项卡下进行检查。运行测试时可能会出现设备上出现弹出消息或其他意外事件的情况。该视频应该能让您对这种情况有更多的了解。

我建议尝试这 3 个改变。如果您仍然无法继续,请告诉我。

希望这有帮助。

关于Java Appium 测试无法在 AWS Device Farm 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39221825/

相关文章:

java - Memcache 延迟时间太长?

maven - 要求在子模块中定义 Maven 属性

maven - Maven 中心的 CGLIB 3

java - JTree:不会重新显示新模型

java - 二维数组使用 if 语句检查行值

java - 如何使用 Scanner.hasNextInt() 检查接下来的 3 个输入是否为 int 并仅在 java 中循环

android - 缩放 View 时, Canvas 被清除

keystore 的 Android Studio 备份

android - 在MPAndroidChart中,如何为Barchart中的每个Bar添加点击事件?

java - 无法创建嵌入式 h2 数据库