2016-08-30 205 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

相關問題