Appium Essentialsブックの翻訳。 第6章

こんばんは、ハブラ。 Appium Essentialsの翻訳はここで終わりです。 すでに完了しているもの:


この章では:




始める前に


開始する前に、すべてが設定されていることをもう一度確認してください。
Android要件IOS要件
Java(バージョン7以降)Mac OS(バージョン10.7以降)
Android SDK API、バージョン17以降Xcode(バージョン4.6.3以降、5.1を推奨)
AndroidデバイスIOSプロファイル[これらおよびその他のあいまいな単語については、以下で説明します]
デバイス上のChromeブラウザーIOSデバイス
Eclipse [またはIdea]SafariLauncherアプリ
Testngios-webkit-debug-proxy
AppiumサーバーJava(バージョン7以降)
Appiumクライアントライブラリ(Javaはまだあります)Eclipse [またはIdea]
Selenium ServerおよびWebDriver JavaライブラリTestng
APK情報アプリSelenium ServerおよびWebDriver Javaライブラリ
Appiumサーバー
Appiumクライアントライブラリ(Javaはまだあります)

Androidデバイスが開発者モードであり、USBデバッグが有効になっていることを確認してください。
デバイスが接続されていることを確認するには、コマンドラインに入力します

adb devices 

Androidデバイスのリストが表示されます。 そうでない場合は、adbサーバーを再起動してください。

 adb kill-server adb start-server 

ネイティブおよびハイブリッドアプリケーション用のAndroidに必要な機能


第1章では、オプションとは何か、なぜオプションなのかについて説明しました。 それでは、コードに直行しましょう。
まず、パッケージをインポートします。

 import java.io.File; import org.openqa.selenium.remote.DesiredCapabilities; import io.appium.java_client.remote.MobileCapabilityType; 

今DC:

 DesiredCapabilities caps = new DesiredCapabilities(); File app=new File("path of the apk");//    apk caps.setCapability(MobileCapabilityType.APP,app);//   ,      caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.4");// Android caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");// OS caps.setCapability(MobileCapabilityType.DEVICE_NAME, "Moto X");//    caps.setCapability(MobileCapabilityType.APP_PACKAGE, "   (  ,  apk info app)"); caps.setCapability(MobileCapabilityType.APP_ACTIVITY, ",     (    apk info app)"); 

Webアプリケーション用のAndroidに必要な機能


Webアプリケーションを使用する場合、ブラウザを使用するため、上記のオプションの一部(APP、APPパッケージ、およびAPP ACTIVITY)は必要ありません。
まず、パッケージをインポートします。

 import java.io.File; import org.openqa.selenium.remote.DesiredCapabilities; import io.appium.java_client.remote.MobileCapabilityType; 

今DC:

 DesiredCapabilities caps = new DesiredCapabilities(); caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.4");// Android caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");// OS caps.setCapability(MobileCapabilityType.DEVICE_NAME, "Moto X");//    caps.setCapability(MobileCapabilityType.BROWSER_NAME, "Chrome"); //  Chrome 

構成は完了しました。これで、ドライバーを初期化できます。
インポート:

 import io.appium.java_client.android.AndroidDriver; import java.net.URL; 

初期化:

 AndroidDriver driver = new AndroidDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps);// ,   Appium- 

すべてがAndroidデバイスで動作する準備ができました。

暫定プロファイル、SafariLauncher、ios-webkit-debug-proxyを理解する


iOS用のドライバーを構成する前に、いくつかの手順に従う必要があります。

暫定プロファイル

iOSデバイスにアプリケーションをインストールするには、プロファイルが必要です。 これを行うには、 iOS Developer Programに参加してください

登録後、 このページにアクセスしてプロファイルを生成してください。

このプロファイルをデバイスにインストールする必要があります。

  1. 生成されたプロファイルをダウンロードする
  2. iOSデバイスをMacに接続します
  3. Xcode(バージョン6)を開き、ウィンドウ->デバイスに移動します



  4. 接続されたデバイスのコンテキストメニューを呼び出し、[暫定プロファイルを表示...]をクリックします。



  5. [+]をクリックして、ダウンロードしたプロファイルを選択し、[完了]をクリックします


SafariLauncherアプリとios-webkit-debug-proxy

SafariLauncherは、デバイスでSafariブラウザーを起動するために使用されます。 Safariブラウザを使用するには、SafariLauncherをビルドしてiOSデバイスに展開する必要があります。

  1. ソースをダウンロード
  2. Xcodeを起動し、SafariLauncherプロジェクトを開きます
  3. 展開するデバイスを選択し、ビルドをクリックします
  4. 次に、Appium.dmgのSafariLauncherを置き換える必要があります。 これには以下が必要です。
    1. Appium.dmgのコンテキストメニューを呼び出す
    2. [パッケージの内容を表示]をクリックして、目次/リソース/ node_modules / appium / build / SafariLauncherに移動します
    3. SafariLauncher.zipを解凍します
    4. サブモジュール/ SafariLauncher / build / Release-iphoneosに移動し、SafariLauncherアプリケーションを自分のものに置き換えます。
    5. サブモジュールを圧縮し、SafariLauncher.zipに名前を変更します

次に、Macにios-webkit-debug-proxyをインストールして、接続を確立し、Webビューにアクセスする必要があります。 プロキシを配置するには、brewを使用してコマンドを実行します

 brew install ios-webkit-debug-proxy 

ネイティブおよびハイブリッドアプリケーション用のiOSに必要な機能


第1章では、オプションとは何か、なぜオプションなのかについて説明しました。 それでは、コードに直行しましょう。
まず、パッケージをインポートします。

 import java.io.File; import org.openqa.selenium.remote.DesiredCapabilities; import io.appium.java_client.remote.MobileCapabilityType; 

今DC:

 DesiredCapabilities caps = new DesiredCapabilities(); File app=new File("path of the .app"); caps.setCapability(MobileCapabilityType.APP,app); caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "8.1"); caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "iOS");// caps.setCapability(MobileCapabilityType.DEVICE_NAME, "iPad");// caps.setCapability("udid","Id  ");//UDID 

Webアプリケーション用のiOSに必要な機能


必要のないオプションもあります。 これらのオプションには、APP、APPパッケージ、およびAPPアクティビティが含まれます。 ここまでがポイントです。

まず、パッケージをインポートします。

 import java.io.File; import org.openqa.selenium.remote.DesiredCapabilities; import io.appium.java_client.remote.MobileCapabilityType; 

今DC:

 DesiredCapabilities caps = new DesiredCapabilities(); caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "8.1"); caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "iOS"); caps.setCapability(MobileCapabilityType.DEVICE_NAME,"iPad"); caps.setCapability("udid","UDID  "); caps.setCapability(MobileCapabilityType.BROWSER_NAME,"Safari"); //  Safari 

構成は完了しました。これで、ドライバーを初期化できます。 インポート:

 import io.appium.java_client.ios.IOSDriver; import java.net.URL; 

初期化:
 IOSDriver driver = new IOSDriver (new URL("http://127.0.0.1:4723/wd/hub"),caps); //,  Appium- 

すべてがiOSデバイスで動作する準備ができています。

これで、TestNGを追加して、すべてを一緒に実行できます。

 import io.appium.java_client.ios.IOSDriver; import io.appium.java_client.remote.MobileCapabilityType; import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.util.concurrent.TimeUnit; import org.openqa.selenium.remote.DesiredCapabilities; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; public class TestAppIication { IOSDriver driver; @BeforeClass //      public void setUp() throws MalformedURLException{ DesiredCapabilities caps = new DesiredCapabilities(); File app=new File("path of the .app"); caps.setCapability(MobileCapabilityType.APP,app); caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "8.1"); caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "iOS"); caps.setCapability(MobileCapabilityType.DEVICE_NAME,"iPad"); caps.setCapability("udid","UDID  "); caps.setCapability(MobileCapabilityType.BROWSER_NAME, "Safari");// ,    - driver = new IOSDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps); driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS); } @Test public void testExample(){ //   } @AfterClass public void tearDown(){ driver.closeApp(); //driver.quit(); // ,    - } } 

ネイティブアプリケーションの自動化


ネイティブAndroidアプリ


Androidオートメーションの場合、前の章(エミュレーターでテスト済み)と同じコードが機能します。avdに関する情報を削除する必要があるのはユーザーだけです。

Androidでのダイヤルの例を見てみましょう。


  1. 次の必要な機能をインストールして、ダイヤラーアプリケーションを実行します。

     caps.setCapability(MobileCapabilityType.APP_PACKAGE, "com.android.dialer"); caps.setCapability(MobileCapabilityType.APP_ACTIVITY, "com.android.dialer.DialtactsActivity"); 

  2. 次に、ダイヤルパッドを見つける必要があります。 AccessibityIdで検索します

     WebElement dialPad= driver.findElementByAccessibilityId("dial pad")); 

  3. クリックして

     dialPad.click(); 

  4. 数字キーを見つける必要があります。 簡単なロジックを使用して、キー0〜9を名前で検索し、それぞれをクリックします

     for(int n=0;n<10;n++){ driver.findElement(By.name(""+n+"")).click(); } 

  5. この場合、間違った電話番号を使用しているため、電話はどこにも鳴りません。

  6. 呼び出しボタンを見つけましょう。 AccessibilityIdで検索します。

     WebElement dial= driver.findElementByAccessibilityId("dial")); 

  7. クリック:

     dial.click(); 

  8. TestNGを使用するスクリプト全体は次のようになります。

     public class TestAppIication { AndroidDriver driver; @BeforeClass public void setUp() throws MalformedURLException{ DesiredCapabilities caps = new DesiredCapabilities(); caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.4"); caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android"); caps.setCapability(MobileCapabilityType.DEVICE_NAME,"Moto X");//I am using Moto X as Real Device caps.setCapability(MobileCapabilityType.APP_PACKAGE, "com.android.dialer"); caps.setCapability(MobileCapabilityType.APP_ACTIVITY, "com.android.dialer.DailtactsActivity"); driver = new AndroidDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps); driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS); } @Test public void testExample(){ WebElement dialPad=driver.findElementByAccessibilityId("dial pad"); dialPad.click(); for(int n=0;n<10;n++){ driver.findElement(By.name(""+n+"")).click(); } WebElement dial=driver.findElementByAccessibilityId("dial"); dial.click(); } @AfterClass public void tearDown(){ driver.closeApp(); } } 

ネイティブiOSアプリ


ここでは、BMI計算機を使用します


体重と身長によって肥満度指数を計算します。 これを行うには、次を実行します。

  1. 次の必要な機能をインストールして、アプリケーションを実行します

     File app=new File("/Users/mhans/appium/ios/BmiCalc.app");//You can change it with your app address caps.setCapability(MobileCapabilityType.APP,app);//To set the app path 

  2. 次に、身長と体重の入力フィールドを見つける必要があります。 Xpathで検索します

     WebElement height=driver.findElement(By.xpath("(//UIATextField)[2]")); WebElement weight=driver.findElement(By.xpath("(//UIATextField)[4]")); 

  3. 計算ボタンを探しています。 名前を使用します:

     WebElement calculateBMI=driver.findElement(By.name("Calculate BMI")); 

  4. 成長を示す

     height.sendKeys("1.82"); 

  5. 重量を示す

     weight.sendKeys("75"); 

  6. インデックスを数える

     calculateBMI.click(); 

  7. TestNGを使用するスクリプト全体は次のようになります。

     public class TestAppIication { IOSDriver driver; @BeforeClass public void setUp() throws MalformedURLException{ File app=new File("/Users/mhans/appium/ios/BmiCalc.app");//You can change it with your app address DesiredCapabilities caps = new DesiredCapabilities(); caps.setCapability(MobileCapabilityType.APP,app); caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "8.1"); caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "iOS"); caps.setCapability(MobileCapabilityType.DEVICE_NAME,"iPad"); caps.setCapability("udid","Real Device Id "); driver = new IOSDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps); driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS); } @Test public void testExample(){ WebElement height=driver.findElement(By.xpath("(//UIATextField)[2]")); height.sendKeys("1.82"); WebElement weight=driver.findElement(By.xpath("(//UIATextField)[4]")); weight.sendKeys("75"); WebElement calculateBMI=driver.findElement(By.name("Calculate BMI")); calculateBMI.click(); } @AfterClass public void tearDown(){ driver.closeApp(); } } 



Webアプリケーションの自動化


Android Webアプリケーション


たとえば、Gmailのログインページを考えます。 このセクションでは、実際のデバイスでChromeを起動し、目的のアドレスに移動し、ログイン/パスワードを転送して、[サインイン]をクリックする方法を説明します。


  1. 次の必要な機能をインストールしてChromeを実行します

     caps.setCapability(MobileCapabilityType.BROWSER_NAME, "Chrome"); 

  2. 次に、アドレスを指定する必要があります

     driver.get("https://www.gmail.com"); 

  3. ユーザー名要素を見つける必要があります。 名前ロケーターを使用します

     WebElement username=driver.findElement(By.name("Email")); 

  4. 値を渡す

     username.sendKeys("test"); 

  5. 次に、パスワード要素を見つける必要があります。 名前ロケーターを使用します

     WebElement password=driver.findElement(By.name("Passwd")); 

  6. 値を渡す

     password.sendKeys("test"); 

  7. サインインボタンを探しています。 名前ロケーターを使用します

     WebElement signIn=driver.findElement(By.name("signIn")); 

  8. クリックして

     signIn.click(); 

  9. TestNGを使用するスクリプト全体は次のようになります。

     public class TestAppIication { AndroidDriver driver; @BeforeClass public void setUp() throws MalformedURLException { DesiredCapabilities caps = new DesiredCapabilities(); caps.setCapability(MobileCapabilityType.BROWSER_NAME, "Chrome"); caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.4"); caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android"); caps.setCapability(MobileCapabilityType.DEVICE_NAME,"Moto X"); driver = new AndroidDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps); driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS); } @Test public void testExample(){ driver.get("https://www.gmail.com"); WebElement username=driver.findElement(By.name("Email")); username.sendKeys("test"); WebElement password=driver.findElement(By.name("Passwd")); password.sendKeys("test"); WebElement signIn=driver.findElement(By.name("signIn")); signIn.click(); } @AfterClass public void tearDown(){ driver.quit(); } } 

IOS Webアプリケーション


たとえば、Google検索ページを考えてみましょう。 このセクションでは、実際のデバイスでブラウザを起動し、目的のアドレスに移動し、検索文字列を渡して、[検索]をクリックする方法を説明します。


  1. 次の必要な機能をインストールして、Safariを実行します

     caps.setCapability(MobileCapabilityType.BROWSER_NAME, "Safari"); 

  2. 次に、アドレスを指定する必要があります

     driver.get("https://www.google.com"); 

  3. searchBox要素を見つける必要があります。 名前ロケーターを使用します

     WebElement searchBox=driver.findElement(By.name("q")); 

  4. 値を渡す

     searchBox.sendKeys("Appium for mobile automation"); 

  5. スクリプトを実行する前に、プロキシコマンドを有効にする必要があります。

     ios_webkit_debug_proxy -c 2e5n6f615z66e98c1d07d22ee09658130d345443:27753 –d 

    2e5n6f615z66e98c1d07d22ee09658130d345443をデバイスのUDIDに置き換えます。 ポートは27753である必要があります

  6. Web Inspectorが有効(設定| Safari |詳細設定)で、デバイスにSafariLauncherがインストールされていることを確認してください

  7. TestNGを使用するスクリプト全体は次のようになります。

     public class TestAppIication { IOSDriver driver; @BeforeClass public void setUp() throws MalformedURLException{ DesiredCapabilities caps = new DesiredCapabilities(); caps.setCapability(MobileCapabilityType.BROWSER_NAME, "Safari"); caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "8.1"); caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "iOS"); caps.setCapability(MobileCapabilityType.DEVICE_NAME, "iPad"); caps.setCapability("udid","Real Device Identifier"); driver = new IOSDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps); driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS); } @Test public void testExample(){ driver.get("https://www.google.com"); WebElement searchBox=driver.findElement(By.name("q")); searchBox.sendKeys("Appium for mobile automation"); } @AfterClass public void tearDown(){ driver.quit(); } } 


ハイブリッドオートメーション


Androidハイブリッドアプリ


例として、 Hybridtestappを使用します
ハイブリッドアプリケーションを使用するには、 ここに示す変更を行う必要があります 。 Hybridtestappアプリケーションでは、既に適用されています。


例では、アプリケーションのフォームに入力しようとします。

  1. 次の必要な機能をインストールして、ハイブリッドアプリケーションを実行します

     File app=new File("C:\\Appium_test\\HybridtestApp.apk");// (On window platform) caps.setCapability(MobileCapabilityType.APP,app); caps.setCapability(MobileCapabilityType.APP_PACKAGE, "com.example.hybridtestapp"); caps.setCapability(MobileCapabilityType.APP_ACTIVITY, "com.example.hybridtestapp.MainActivity"); 

  2. 次に、WebViewで動作するようにコンテキストを変更する必要があります

     Set<String> contexts = driver.getContextHandles(); for (String context : contexts) { System.out.println(context); //   } 

  3. スイッチ

     driver.context("WEBVIEW_com.example.hybridtestapp"); 

    または

     driver.context((String) contextNames.toArray()[1]); 

  4. WebViewに移動した後、First Name入力フィールドを見つける必要があります。 名前ロケーターで検索します

     WebElement firstName=driver.findElement(By.name("fname")); firstName.sendKeys("test"); 

  5. そして姓

     WebElement lastName=driver.findElement(By.name("lname")); lastName.sendKeys("test"); 

  6. したがって、残りのフィールドに入力します

     WebElement age=driver.findElement(By.name("age")); age.sendKeys("26"); WebElement username=driver.findElement(By.name("username")); username.sendKeys("appiumTester"); WebElement password=driver.findElement(By.id("psw")); password.sendKeys("appium@123"); 

  7. そして、登録ボタンをクリックします

     WebElement registerButton=driver.findElement(By.id("register")); registerButton.click(); 

  8. TestNGを使用するスクリプト全体は次のようになります。

     public class TestAppIication { AndroidDriver driver; @BeforeClass public void setUp() throws MalformedURLException{ File app=new File("C:\\Appium_test\\HybridtestApp.apk"); caps.setCapability(MobileCapabilityType.APP,app); DesiredCapabilities caps = new DesiredCapabilities(); caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.4"); caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android"); caps.setCapability(MobileCapabilityType.DEVICE_NAME, "Moto X"); caps.setCapability(MobileCapabilityType.AUTOMATION_NAME, "Appium");// Selendroid   android  4.4 caps.setCapability(MobileCapabilityType.APP_PACKAGE, "com.example.hybridtestapp"); caps.setCapability(MobileCapabilityType.APP_ACTIVITY, "com.example.hybridtestapp.MainActivity"); driver = new AndroidDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps); driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS); } @Test public void testExample(){ Set<String> contexts = driver.getContextHandles(); for (String context : contexts) { System.out.println(context); } driver.context((String) contexts.toArray()[1]); WebElement firstName=driver.findElement(By.name("fname")); firstName.sendKeys("test"); WebElement lastName=driver.findElement(By.name("lname")); lastName.sendKeys("test"); WebElement age=driver.findElement(By.name("age")); age.sendKeys("26"); WebElement username=driver.findElement(By.name("username")); username.sendKeys("appiumTester"); WebElement password=driver.findElement(By.id("psw")); password.sendKeys("appium@123"); WebElement registerButton=driver.findElement(By.id("register")); registerButton.click(); } @AfterClass public void tearDown(){ driver.closeApp(); } } 

ハイブリッドiOSアプリ


WebViewAppアプリケーションの例を検討します


アプリケーションでの作業を試みます。

  1. 次の必要な機能をインストールして、ハイブリッドアプリケーションを実行します

     File app=new File("/Users/mhans/appium/ios/WebViewApp.app"); caps.setCapability(MobileCapabilityType.APP,app); 

  2. 次に、入力フィールドを見つけて、目的のアドレスを指定する必要があります

     WebElement editBox=driver.findElement(By.className("UIATextField")); editBox.sendKeys("www.google.com"); 

  3. 検索して[Go]ボタンをクリックします

     WebElement goButton=driver.findElement(By.name("Go")); goButton.click(); 

  4. 次に、WebViewで動作するようにコンテキストを変更する必要があります

     Set<String> contexts = driver.getContextHandles(); for (String context : contexts) { System.out.println(context); } 

  5. スイッチ

     driver.context("WEBVIEW_com.example.testapp"); 

    または

     driver.context((String) contextNames.toArray()[1]); 

  6. それだけです Googleページで作業できます。 画像の石積みを開こうとしています:

     WebElement images=driver.findElement(By.linkText("Images")); images.click(); 

  7. テスト全体を開始する前に、プロキシを有効にする必要があります

     ios_webkit_debug_proxy -c <UDID >:27753 –d 

    ポートは27753である必要があります

  8. TestNGを使用するスクリプト全体は次のようになります。

     public class TestAppIication { IOSDriver driver; @BeforeClass public void setUp() throws MalformedURLException{ DesiredCapabilities caps = new DesiredCapabilities(); File app=new File("/Users/mhans/appium/ios/WebViewApp.app"); caps.setCapability(MobileCapabilityType.APP,app); caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "8.1"); caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "iOS"); caps.setCapability(MobileCapabilityType.DEVICE_NAME, "iPad"); caps.setCapability("udid","Real Device Identifier"); driver = new IOSDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps); driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS); } @Test public void testExample(){ WebElement editBox=driver.findElement(By.className("UIATextField")); editBox.sendKeys("https://www.google.com"); WebElement goButton=driver.findElement(By.name("Go")); goButton.click(); Set<String> contexts = driver.getContextHandles(); for (String context : contexts) { System.out.println(context); } driver.context((String) contexts.toArray()[1]); WebElement images=driver.findElement(By.linkText("Images")); images.click(); } @AfterClass public void tearDown(){ driver.closeApp(); } } 



以上です。 最後の章が残っています。ここでは、モバイルプラットフォーム向けの特定のユーザーアクションをシミュレートする方法について説明します。

Source: https://habr.com/ru/post/J333546/


All Articles