java - 在 Appium-java 中寻找用于完整应用程序测试的良好编码格式

标签 java testing appium hybrid

关于Appium Scripting的一些疑惑 1.我在上面尝试的脚本是正确的吗? 2.完成quickpay后,我想做下一个场景,如何重定向到下一个类(class)做下一个场景? 我试过的代码如下 基类

   package ********;

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


import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;

public class ************* {
     protected AndroidDriver driver;
        protected WebDriverWait wait;

        //before Test Annotation makes a java function to run every time before a TestNG test case
        @BeforeTest
        protected void createAppiumDriver() throws MalformedURLException, InterruptedException {

              DesiredCapabilities capabilities = new DesiredCapabilities();
              capabilities.setCapability("deviceName", "0123456789ABCDEF");
              capabilities.setCapability(CapabilityType.BROWSER_NAME, "Android");
              capabilities.setCapability(CapabilityType.VERSION, "5.0");
              capabilities.setCapability("platformName", "Android");
              capabilities.setCapability("appPackage", "**********);
              capabilities.setCapability("appActivity", "********");
              capabilities.setCapability("unicodekeyboard", true);
              capabilities.setCapability("resetkeyboard", true);
              driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);          
              driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);
              WebDriverWait wait = new WebDriverWait(driver, 300);
              wait.until(ExpectedConditions.elementToBeClickable(By.className("android.widget.FrameLayout")));
        }

        //After Test Annotation makes a java function to run every time after a TestNG test case
        @AfterTest
        public void afterTest(){

        //quit the driver
        driver.quit();
        }

    }

屏幕类

package **********;

        import io.appium.java_client.MobileBy;

        import org.openqa.selenium.By;
        import org.openqa.selenium.support.ui.ExpectedConditions;
        import org.testng.annotations.Test;


        public class QuickPay extends ************ {
            /*--------------------------------Enter pin Starts---------------------------------*/

             //Enter 4 digit pin to login
             @Test
             public void T4a_Login() {      
                driver.findElement(By.xpath("//android.view.View[contains(@resource-id,'ext-button-1')]")).sendKeys("1234");
             } 


        /*--------------------------------Enter pin Ends---------------------------------*/


        /*QuickPay Starts*/

        /*--------------------------------Quick pay to Federal Bank Account starts---------------------------------*/

             //Click on quick pay
             @Test
             public void T5a_QuickpayF() {      
                driver.findElement(By.xpath("//android.view.View[contains(@resource-id,'ext-button-30')]")).click();    
             } 

             //Enter account number , Amount and click quick pay
             @Test
             public void T5b_QuickpayF() {      
                driver.findElement(By.xpath("//android.widget.EditText[contains(@resource-id,'ext-element-229')]")).sendKeys("10015000301404"); 
                driver.findElement(By.xpath("//android.widget.EditText[contains(@resource-id,'ext-element-236')]")).sendKeys("50"); 
                driver.hideKeyboard();  
                driver.findElement(By.xpath("//android.view.View[contains(@resource-id,'ext-button-34')]")).click();
             }

             //Click on confirm button
             @Test
             public void T5c_QuickpayF() {      
                 driver.findElement(By.xpath("//android.view.View[contains(@resource-id,'ext-button-38') and @index='0']")).click();
             }

             //Enter pin for Quick paya-Federal bank
             @Test
             public void T5d_QuickpayF() {      
                 driver.findElement(By.xpath("//android.view.View[contains(@resource-id,'ext-button-45') and @index='1']")).click();    
                 driver.findElement(By.xpath("//android.view.View[contains(@resource-id,'ext-button-46') and @index='2']")).click();
                 driver.findElement(By.xpath("//android.view.View[contains(@resource-id,'ext-button-47') and @index='3']")).click();
                 driver.findElement(By.xpath("//android.view.View[contains(@resource-id,'ext-button-48') and @index='4']")).click();
             }

             //Click on home for redirect to Home page
             @Test
             public void T5e_QuickpayF() {  
                 System.out.println("testtt");  
                 driver.findElement(By.xpath("//android.view.View[contains(@resource-id,'ext-button-60')and @index='0']")).click();
                 System.out.println("rt");
             }



        /*--------------------------------Quick pay to Federal Bank Account Ends---------------------------------*/

        }

PoM.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.aws.appium</groupId>
  <artifactId>appium-android-test</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

 <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-jar-plugin</artifactId>
             <version>2.6</version>
             <executions>
                <execution>
                     <goals>
                        <goal>test-jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-jar-plugin</artifactId>
             <version>2.6</version>
            <executions>
                 <execution>
                     <goals>
                         <goal>test-jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
 </build>
   <properties>
        <appium.version>3.3.0</appium.version>
        <testng.version>6.9.10</testng.version>
    </properties>

    <dependencies>

        <!-- Appium -->
        <dependency>
            <groupId>io.appium</groupId>
            <artifactId>java-client</artifactId>
            <version>${appium.version}</version>
        </dependency>

        <!-- testng -->
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>${testng.version}</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

</project>

最佳答案

您的测试很难维护和阅读。您应该阅读页面对象模式,简而言之,它将定义被测应用程序屏幕上的元素的部分与您要对这些元素执行的行为和检查分开。

基本上不是每次都调用 .findByXPath()(当你有几十或几百个步骤时,你会很难维护),你想调用一些描述你的 Action 的方法想要实现 f.e. loginPage.setUsername() 其中 loginPage 是您定义所有元素的类。 @FindBy(xpath = "//android.some.xpath") MobileElement loginField 和方法 public void setUsername() 这样,当应用程序发生变化时,您只需更改类里面的一种方法,而不是你所有的测试。

Appium Example of Page Object

Selenium Best Practice Guide

关于java - 在 Appium-java 中寻找用于完整应用程序测试的良好编码格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43886043/

相关文章:

java - 如何让 Appium 和应用程序在每次测试之前自动启动 iOS 的 Java 和高跟鞋类?

java - 在 Vaadin 7 项目中使用 TinyMCEEditor Wrapper 时如何更改 TinyMCETextField 中的默认字体大小?

java - 如何使用荣格的埃德蒙兹卡普获得每个边缘的流量?

java - 将 System.out 重定向到 JavaFX 中的 TextArea

java - Mockito 的基本模拟场景

android - Robotium 测试失败,出现 : junit. framework.AssertionFailedError : View can not be clicked!

Django test.TestCase 与 unittest.TestCase

java - 获取 无法创建新 session

java - 更改线程池中一个线程的延迟

java - Appium MobileElement.tap();不适用于移动网络的 iosSimulator 8.2