2016-08-30 165 views
0

我有Appium Insecptor记录的Java语言的Appium脚本。Java Appium测试无法在AWS设备场上运行

我的脚本将只能做5个步骤:

  1. 点击用户名外地

  2. 输入用户名

  3. 点击密码字段

  4. INOUT密码

  5. 单击登录按钮

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

我的确遵循了AWS document的设备农场修改我pom.xml文件,通过使用Maven包mvn clean package -Dskiptests=true它打包,最后上传到zip-with-dependencies.zip AWS设备农场。

但我的测试未能运行。 这里有结果

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

检查相同的脚本是否在物理设备上正常工作。尝试使用'wd = new AndroidDriver <>(新的URL(“http://127.0.0.1:4723/wd/hub”)功能);'并验证元素定位器及其值是否正确。 – Abhinav

回答

2

我的AWS设备农场团队合作。

感谢您的详细信息。这有助于。

解决方案

  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的视频录制功能。如果测试失败,它会非常有帮助,如果有一个运行的视频。您可以在“文件”选项卡下进行检查。在运行测试时,可能出现设备上出现弹出窗口或其他意外事件。在这种情况下,视频应该会给你更多的洞察力。

我会建议尝试这3个改变。让我知道你是否仍然无法继续。

希望这会有所帮助。

+0

谢谢@Nikof,我有几个问题,因为我对AWS和Appium很陌生1.我应该在上传之前将期望功能留空吗?没有他们,我发现没有什么不同。 2.将IP更改为127.0.0.1后,出现不同的错误: “使用给定的搜索参数无法在页面上找到元素”,[详细信息](http://pastebin.com/hVnnb6t3),但参数由Appium Inspector记录。我认为这应该是正确的。 3.是的,我知道有视频记录。 –

+0

我需要你的帮助,@Nikof =( –

+0

嗨凯文, 对不起,请延迟 1.是的,建议让它保持空白 2.你可以与我分享运行url,因为我可以用它来查找更多的细节,以减少问题的原因。 – NikofTime

相关问题