Java Appium Test无法在AWS Device Farm上运行

时间:2016-08-30 07:53:59

标签: java android maven amazon-web-services

我有Java语言的Appium脚本,由Appium Insecptor重新编写。

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

  1. 点击用户名字段

  2. 输入用户名

  3. 点击密码字段

  4. 输入密码

  5. 点击登录按钮

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

    我确实按照AWS Device Farm的document修改了我的pom.xml文件,使用Maven包mvn clean package -Dskiptests=true将其打包,最后将zip-with-dependencies.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();
        } 
    

1 个答案:

答案 0 :(得分:2)

我在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的视频录制功能。当测试失败时,如果有一个运行视频,它会有很大帮助。您可以在“文件”选项卡下进行检查。可能是在运行测试时设备上出现pop或其他意外事件的情况。该视频应该为您提供更多洞察力。

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

    希望这有帮助。