Cómo escribir código de prueba de Appium: su guía completa 2020

Tutorial de prueba de Appium
Tutorial de prueba de Appium

Discutiremos cómo escribir  Prueba de Appium guiones en este tutorial. Podemos probar nuestras aplicaciones en Simulator y dispositivos reales. Appium es compatible con las plataformas iOS y Android.

Tópicos cubiertos :

Cómo encontrar el paquete y la actividad de la aplicación en Android

Para ejecutar sus scripts de prueba de Appium en dispositivos Android, tenemos que pasar el paquete de la aplicación y la actividad de la aplicación según las capacidades deseadas. Hay un par de formas de obtener la actividad de la aplicación y el paquete de la aplicación. Los discutiremos aquí. Para este ejemplo, elegiremos la aplicación de contacto. Siga los pasos a continuación para obtener el paquete de actividades y aplicaciones.

Para ventanas

  • Tipo "adb devices"Para comprobar los dispositivos conectados o el emulador
  • Una vez que su dispositivo esté conectado, toque la aplicación de contacto para abrirla.
  • Escriba los siguientes comandos para obtener la actividad y el paquete de la aplicación
adb shell dumpsys window 
| find -E mCurrentFocus

Para Mac / Linux

  • Tipo "adb devices"Para comprobar los dispositivos conectados o el emulador
  • Una vez que su dispositivo esté conectado, toque la aplicación de contacto para abrirla.
  • Escriba los siguientes comandos para obtener la actividad y el paquete de la aplicación
adb shell dumpsys window 
| grep mCurrentFocus
Cómo agregar un paquete / actividad de la aplicación
Cómo agregar un paquete / actividad de la aplicación

Cómo crear su primer proyecto para las pruebas de Appium

Para crear el proyecto de prueba de Appium, necesitamos clientes Maven, TestNG y Appium Java. Discutiremos esto en detalle a continuación.

Requisito previo

  • Maven
  • Añadir TestNG como una dependencia de maven
  • Agregar cliente java de Appium

Cómo crear un proyecto Maven

Para crear un proyecto de maven para las pruebas de Appium, haga clic en Archivo y seleccione Nuevo–> Proyecto.

Creando un proyecto en IntelliJ
Creando un proyecto

Después de eso, seleccione Maven y haga clic en Siguiente

Elija maven y haga clic en siguiente
Elija Maven y haga clic en siguiente

Solicitará Groupid y Artifactid. Proporcione lo mismo. Por favor, consulte la siguiente imagen como referencia.

ID de artefacto de maven, ID de grupo
proporcionar groupId, Artifact id para Maven

Ahora seleccione el nombre del proyecto y haga clic en Finalizar.

Nombre del Proyecto
Agregar nombre de proyecto
Cómo agregar dependencia de maven
Cómo agregar dependencia de Maven

Tenemos que agregar la dependencia testNG en pom.xml para verificar su aplicación. Agregue las siguientes dependencias en su pom.xml como se muestra en la imagen de arriba.

<dependencies>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.8.5</version>
            <scope>test</scope>
        </dependency>
      
        <dependency>
            <groupId>io.appium</groupId>
            <artifactId>java-client</artifactId>
            <version>7.2.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

Capacidades deseadas Prueba de Appium

En las pruebas de Appium, necesitamos las capacidades deseadas para interactuar con los dispositivos. Capacidades deseadas son parámetros enviados como un par clave-valor codificados en formato JSON para interactuar con dispositivos Android / iOS. Los clientes de Appium envían esta información al servidor de Appium cuando se inicia una nueva sesión. Cada cliente de Appium crea capacidades a su manera. Pero, en última instancia, todos los parámetros se enviarán en formato JSON al servidor. Para obtener más detalles sobre las capacidades deseadas, haga clic en este enlace.

Cómo agregar las capacidades deseadas para Android

Para interactuar con sus dispositivos Android con su servidor de Appium, tenemos que pasar las capacidades específicas deseadas. Ayudará al servidor de Appium a identificar los dispositivos Android conectados de forma única. A continuación se muestran las listas:

1. Tienes que pasar la clave como "platformName”O“ MobileCapabilityType.PLATFORM_NAME"Y valor como"androide"

2. Debe pasar la clave como “platformVersion” o “MobileCapabilityType.PLATFORM_VERSION"Y valor como" 23 "[este valor es la versión api de la versión de Android]

3. Tienes que pasar la clave como "nombre del dispositivo"O"MobileCapabilityType.NOMBRE DEL DISPOSITIVO"Y valor como"Nexus 5X"[Actualice el valor con el nombre de su dispositivo]

4. Tienes que pasar la clave como "AutomationName"O"MobileCapabilityType.AUTOMATION_NAME"Y valor como"UIAutomator2"[Tienes que usar UIAutomator if UIAutomator2 No funciona]

5. Debe pasar la clave como “udid” o “MobileCapabilityType.TU HICISTE"Y valor como"emulador-5554"

6. Tienes que pasar la clave como "appPackage"Y valor como"com.android.contacts"[Actualiza los paquetes de la aplicación de tu aplicación]

7. Tienes que pasar la clave como "appActivity"Y valor como"com.android.contacts.activities.PeopleActivity"[Actualizar la actividad de la aplicación de su aplicación]

8. Consulte la siguiente imagen para obtener más detalles:

Añadiendo las capacidades deseadas para Android
Añadiendo las capacidades deseadas para Android

Cómo agregar las capacidades deseadas para iPhone

Para interactuar con sus dispositivos Android con su servidor de Appium, tenemos que pasar las capacidades específicas deseadas. Ayudará al servidor de Appium a identificar los dispositivos Android conectados de forma única. A continuación se muestran las listas:

1. Tienes que pasar la clave como "platformName”O“ MobileCapabilityType.PLATFORM_NAME"Y valor como"iOS"

2. Debe pasar la clave como “platformVersion” o “MobileCapabilityType.PLATFORM_VERSION"Y valor como"13.6”[Compruebe la versión de su sistema operativo]

3. Tienes que pasar la clave como "nombre del dispositivo"O"MobileCapabilityType.NOMBRE DEL DISPOSITIVO"Y valor como"iPhone 11 Pro Max"[Actualice el valor con el nombre de su dispositivo]

4. Tienes que pasar la clave como "AutomationName"O"MobileCapabilityType.AUTOMATION_NAME"Y valor como"XCUITest"[ utilizar XCUITest(iOS 9.3 y superior) o UIAutomatización(iOS 9.3 y versiones inferiores)]

5. Debe pasar la clave como “udid” o “MobileCapabilityType.TU HICISTE"Y valor como"3C4B567E-C4E4-445D-A613-F4867DD2FF67"[Actualizar con la identificación de su dispositivo]

6. Consulte la siguiente imagen para obtener más detalles:

Agregar las capacidades deseadas para iOS
Agregar las capacidades deseadas para iOS

Cómo escribir un script de prueba de Appium (Android)

  1. Para escribir su primer script de prueba de Appium, al principio, necesitamos obtener la identificación del dispositivo de los dispositivos Android o emulador adjuntos. Para obtener la identificación del dispositivo, abra su terminal o símbolo del sistema y escriba "adb devices". Mostrará la lista de dispositivos.
  2. Después de eso, necesitamos crear una clase Java. Para crear una clase java, vaya a la carpeta "/ src / main / java /" en su IDE, haga clic derecho en eso y elija nuevo -> Clase Java.
  3. Ahora agregaremos un método de configuración en Antes de la prueba y crea una instancia de AndroidDriver.
  4. Tenemos que agregar las capacidades deseadas mostrado anteriormente para configurar los parámetros del dispositivo.
  5. Ahora crearemos un Enlance con detalles de hub donde el Appium Esta corriendo.
  6. Ahora llamaremos el AndroidDriver constructor y pase la URL y las capacidades deseadas para inicializar el controlador.
  7. En el método de Prueba, realizaremos las acciones y afirmaremos los resultados deseados. Saber cómo inspeccionar el elemento en el iPhonepor favor refiérase a este enlace. Aprender sobre los métodos de Appiumhaga clic aquí..
  8. A continuación, proporcionamos un código de muestra como referencia. Por favor revise eso.
  9. En el método AfterTest, saldremos del controlador para cerrar la sesión actual.

Cómo crear una clase Java para pruebas de Appium

Para crear una clase Java, consulte la siguiente imagen:

Cómo crear una clase java
Cómo crear una clase java

Ejemplo de código de prueba de Appium en Android

import io.appium.java_client.MobileElement;
import io.appium.java_client.android
        .AndroidDriver;
import io.appium.java_client.remote
        .MobileCapabilityType;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote
        .DesiredCapabilities;
import org.openqa.selenium.support
        .ui.ExpectedConditions;
import org.openqa.selenium.support
        .ui.WebDriverWait;
import org.testng.Assert;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;

public class RunFirstTestAndroid {
    private AndroidDriver driver;

    @BeforeTest
    public void setup() throws MalformedURLException {
        DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
        desiredCapabilities
                .setCapability
                        ("platformName", "Android");
        //desiredCapabilities
        // .setCapability(MobileCapabilityType
        // .PLATFORM_NAME, "Android");
        desiredCapabilities
                .setCapability
                        ("platformVersion", "23");
        //desiredCapabilities
        // .setCapability(MobileCapabilityType
        // .PLATFORM_VERSION, "23");
        desiredCapabilities
                .setCapability
                        ("deviceName", "Nexus 5X");
        //desiredCapabilities
        // .setCapability(MobileCapabilityType
        // .DEVICE_NAME, "Nexus 5X");
        desiredCapabilities
                .setCapability
                        ("automationName", "UIAutomator2");
        desiredCapabilities
                .setCapability
                        (MobileCapabilityType.UDID, "emulator-5554");
        desiredCapabilities
                .setCapability
                        ("udid", "emulator-5554");
        desiredCapabilities
                .setCapability(
                        "ensureWebviewsHavePages", true);
        desiredCapabilities
                .setCapability
                        ("appPackage", "com.android.contacts");
        //desiredCapabilities
        // .setCapability(MobileCapabilityType
        // .App, "com.android.contacts");
        desiredCapabilities
                .setCapability
                        ("appActivity",
                                "com.android.contacts" +
                                        ".activities.PeopleActivity");

        URL remoteUrl = new URL("http://127.0.0.1:4723/wd/hub");
        driver = new AndroidDriver(remoteUrl, desiredCapabilities);
        driver.manage().timeouts()
                .implicitlyWait(20, TimeUnit.SECONDS);
    }

    @Test
    public void sampleTest() throws InterruptedException {
        //Adding new contact
        driver.findElementByAccessibilityId
                ("add new contact")
                .click();
        //clicking on OK button
        WebElement element=driver
                .findElementById
                        ("com.android.contacts" +
                                ":id/right_button");
        element.click();
        //Updating the firstname
        driver.findElementByXPath(
                "/hierarchy/android.widget." +
                "FrameLayout/android.view" +
                        ".ViewGroup/android.widget" +
                ".FrameLayout[2]/android" +
                        ".widget.FrameLayout/android.widget" +
                ".ScrollView/android.widget" +
                        ".LinearLayout/android.widget" +
                ".LinearLayout[2]/android.widget" +
                        ".LinearLayout/android.widget" +
                ".LinearLayout/android.widget" +
                        ".LinearLayout/" +
                        "android.widget.EditText")
                .sendKeys("Hello");
        //updating phone number
        driver
                .findElementByXPath("//android.widget" +
                        ".EditText[@text='Phone']")
                .sendKeys("1234567890");
        //updating email id
        driver
                .findElementByXPath("//android.widget" +
                        ".EditText[@text='Email']")
                .sendKeys("xyz@gmail.com");
        //save the contact
        driver
                .findElementById("com.android" +
                        ".contacts" +
                        ":id/menu_save")
                .click();
        WebDriverWait wait=new WebDriverWait(driver,30);
        WebElement el=driver
                .findElementByXPath("//android.view" +
                        ".View[@content-desc=\"Hello\"]");

        wait.until(ExpectedConditions
                .visibilityOfAllElements(el));

        Assert.assertEquals(el
                .getAttribute("content-desc"),"Hello");
        Assert.assertEquals(driver
                .findElementByXPath("\t\n" +
                "//android.widget" +
                        ".RelativeLayout[@content-desc=" +
                        "\"Call Mobile 1 234-567-890\"]" +
                "/android.widget.TextView[1]")
                .getText(),"1 234-567-890");
        Assert.assertEquals(driver.
                findElementByXPath("//android.widget" +
                        ".RelativeLayout[@content-desc" +
                        "=\"Email Home xyz@gmail.com\"]" +
                        "/android.widget.TextView[1]\n")
                .getText(),"xyz@gmail.com");

    }



    @AfterTest
    public void tearDown(){
        driver.quit();
    }
}


Cómo escribir un script de prueba de Appium en iPhone

  1. Para escribir su primer script de prueba de Appium, al principio, necesitamos obtener la identificación del dispositivo de los dispositivos iPhone conectados o el Simulador. Para obtener la identificación del dispositivo, abra su tipo de terminal “xcrun simctl list | egrep '(Arrancado).' ”Mostrará la lista de dispositivos. Por favor consulte este enlace para obtener más información.
  2. Después de eso, necesitamos crear una clase Java. Para crear una clase java, vaya a la carpeta "/ src / main / java /" en su IDE, haga clic derecho en eso y elija nuevo -> Clase Java.
  3. Ahora agregaremos un método de configuración en Antes de la prueba y crea una instancia de IOSDriver.
  4. Tenemos que agregar las capacidades deseadas mostrado anteriormente para configurar los parámetros del dispositivo.
  5. Ahora crearemos un Enlance con detalles de hub donde el Appium Esta corriendo.
  6. Ahora llamaremos el IOSDriver constructor y pase la URL y las capacidades deseadas para inicializar el controlador.
  7. En el método de Prueba, realizaremos las acciones y afirmaremos los resultados deseados. Saber cómo inspeccionar el elemento en el iPhonepor favor refiérase a este enlace. Aprender sobre los métodos de Appiumhaga clic aquí.
  8. A continuación, proporcionamos un código de muestra como referencia. Por favor revise eso.
  9. En el método AfterTest, saldremos del controlador para cerrar la sesión actual.

Ejemplo de código de prueba de Appium para iPhone

import io.appium.java_client.MobileElement;
import io.appium.java_client.ios.IOSDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote
.DesiredCapabilities;
import org.openqa.selenium.support
.ui.ExpectedConditions;
import org.openqa.selenium.support
.ui.WebDriverWait;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;

public class RunFirstiOSTest {
    private IOSDriver driver;

    @BeforeClass
    DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
        desiredCapabilities
                .setCapability("platformName", "iOS");
        desiredCapabilities
                .setCapability("platformVersion", "13.6");
        desiredCapabilities
                .setCapability("deviceName", "iPhone 11 Pro Max");
        desiredCapabilities
                .setCapability("automationName", "XCUITest");
        desiredCapabilities
                .setCapability("udid", "3C4B567E-C4E4-445D-A613-F4867DD2FF67");
        URL remoteUrl = new URL("http://127.0.0.1:4723/wd/hub");

        driver = new IOSDriver(remoteUrl, desiredCapabilities);
        driver.manage().timeouts()
                .implicitlyWait(20, TimeUnit.SECONDS);
    }

    @Test
    public void sampleTest() {
        //Clciking on the contact app
        MobileElement el1 = (MobileElement) driver
                .findElementByAccessibilityId
                        ("Contacts");
        el1.click();
        //Clicking on Add contact
        MobileElement el2 = (MobileElement) driver
                .findElementByAccessibilityId
                        ("Add");
        el2.click();
        //Sending value to the First Name
        MobileElement el3 = (MobileElement) driver
                .findElementByAccessibilityId
                        ("First name");
        el3.sendKeys("Name1");
        //Sending value to the Last Name
        driver.findElementByAccessibilityId
                ("Last name")
                .sendKeys("Surname");
        //Sending value to the Company
        driver
                .findElementByAccessibilityId
                        ("Company")
                .sendKeys("xyz");
        //Clicking on home
        driver
                .findElementByXPath
                        ("//XCUIElementTypeCell[@name=\"add phone\"]")
                .click();
        //Exmaple of explicit wait. Waiting for the element to be visible
        WebDriverWait wait=new WebDriverWait(driver,30);

        WebElement el= driver
                .findElementByXPath
                        ("//XCUIElementTypeTextField" +
                                "[@name=\"home\"]");
        wait.until(ExpectedConditions
                .visibilityOfAllElements(el));
        el.sendKeys("1234567890");
        //Clcking on Done
        driver
                .findElementByXPath(
                        "//XCUIElementTypeButton" +
                        "[@name=\"Done\"]")
                .click();
        //Asserting the value to verify
        Assert.assertEquals(driver
                .findElementByXPath(
                        "//XCUIElementTypeStaticText" +
                        "[@name=\"Name1 Surname\"]\n")
                .getText(),"Name1 Surname");
        Assert.assertEquals(driver
                .findElementByXPath(
                        "//XCUIElementTypeStaticText" +
                        "[@name=\"xyz\"]")
                .getText(),"xyz");
       
    }

    @AfterClass
    public void tearDown() {
        //Quiting the driver
       driver.quit();
    }



}

testNG Assert

En el código anterior, hemos usado testNG Assert para verificar los datos esperados con los datos reales que obtenemos de los elementos usando los métodos getText () o getAttributes. Assert nos ayuda a que el caso de prueba pase si las condiciones se cumplen; de lo contrario, falla el caso de prueba.

Conclusión

Hasta ahora, hemos cubierto cómo escribir sus primeros scripts de prueba de Appium en Android e iOScómo utilizar las capacidades deseadas, cómo crear un proyecto experto. En la próxima sesión, discutiremos Preguntas y respuestas sobre las pruebas de Appium. Para obtener un tutorial completo sobre Appium, Se puede haz clic aquí

Referencia

  1. Maven
  2. TestNG

Sobre Himadri Das

Hola, soy Himadri Das, soy bloguero y colaborador de código abierto. Tengo alrededor de 11 años de experiencia en el dominio de las tecnologías de la información. Actualmente trabajo en una Startup Company como Quality Assurance Manager. Tengo experiencia práctica en Appium, Selenium, QTP, Locust, marco de automatización, pruebas de rendimiento, pruebas funcionales, Java, python, scripts de Shell, MySql, Redis, Kafka, etc. Además de mi trabajo y escribir blogs, me encanta jugar. guitarra, me encanta viajar y me encanta ver el cricket y el fútbol. Si quieres saber más sobre mí, visita mi perfil de LinkedIn: https://www.linkedin.com/in/himadri-das-2b6b7421/.