2016-08-30 4 views
0

Appium Insecptorが記録したJava言語のAppiumスクリプトがあります。Java AppiumテストはAWS Device Farmで実行できませんでした。

私のスクリプトは唯一の5つのステップを実行するために起こっている:

  1. クリックしてユーザー名フィールド

  2. 入力ユーザ名

  3. クリックしてパスワードフィールド

  4. INOUTパスワード

  5. ログインボタンをクリック

私はAWS Device Farmでスクリプトを実行したいと思います。

私はMavenのパッケージmvn clean package -Dskiptests=trueを使用して、それをパッケージ化し、最終的にAWSデバイスのファームにzip-with-dependencies.zipをアップロードし、私のpom.xmlファイルを変更するためにAWSデバイスファームのdocumentに従ってくださいました。

しかし、私のテストは失敗しました。 は、ここで私は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 ")、capabilities);を使って試して、要素ロケータとその値が正しいかどうかを確認してください。 – Abhinav

答えて

2

です。

ありがとうございました。これは役に立ちます。

ソリューション

  1. 希望の機能:デバイスファームは、あなたが使用している目的の機能を無視します。デバイスファーム内でアプリを別々にアップロードし、実行をスケジュールしている間にデバイスを選択すると、コードで使用するデバイスのタイプ、名前、その他の機能は使用できなくなり、それに依存するコードは機能しなくなります。 空の目的のケーパビリティオブジェクトを作成し、それをAndroidDriverコンストラクタに渡すことは、これにアプローチする理想的な方法です。

  2. アンドロイドドライバー:あなたは

    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

ありがとうございます@ニコフ、私はAWS&Appiumに非常に新しいのでいくつかの質問があります 1.アップロードする前に希望の機能を空白にしておく必要がありますか?私はそれらの有無に違いがないことを発見した。 2. IPを127.0.0.1に変更した後、別のエラーが発生しました: "指定された検索パラメータを使用してページに要素を配置できませんでした。"、[詳細はこちら](http://pastebin.com/hVnnb6t3)、パラメータはAppium Inspectorによって記録されます。私はそれが正しいはずだと思います。 3.はい、ビデオがあります。 –

+0

私はあなたの助けを必要とします@Nikof =( –

+0

こんにちはKevin、 遅れて申し訳ありません 1.はい、空白のままにすることをお勧めします 2.実行URLを参照して共有することはできますか?問題の原因をゼロにするための詳細については – NikofTime

関連する問題