'APP Test/Appium'에 해당되는 글 3건

Hybrid Application

  • 네이티브 앱 형태로 만들되 그 안에서 웹사이트를 띄울 수 있는 브라우저 창을 두는 앱
  • 장점
    • 네이티브 수준의 구현을 업데이트 할 때만 마켓 검수가 필요하고 웹뷰에서 나타나는 컨테츠는 웹 사이트만 수정하기 되기 때문에 훨씬 더 유연하게 개발가 유지보수가 가능함 

 

사전 준비

  • 사전에 크롬드라이버가 설치 되어있어야 한다.

 

웹뷰 모드로 접근

  • 크롬 드라이버 로드 및 웹뷰 모드 on
desired_caps['chromedriverExecutable'] = 'D:\Test_Appium\chromedriver.exe'
desired_caps['autoWebview'] = True
 
  • 자동화 컨텍스트 설정
webview = driver.contexts[1]
driver.switch_to.context(webview)
 
 

만약 Native 메뉴로 접근해야한다면?

  • 해당 메뉴에 접근 할때는 아래와 같이 스위칭을 해줘야 한다.
driver.switch_to.context('NATIVE_APP')
 
  • 다시 웹뷰로 접근할때는 아래와 선언해줍니다.
driver.switch_to.context(webview)
 

예제 소스

'''
Test App
Device: emulator-5554
'''
import unittest
from appium import webdriver
from time import sleep
import os
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException
from appium.webdriver.common.touch_action import TouchAction
 
class LoginTest(unittest.TestCase):
 
    def setUp(self):    
        desired_caps = {}
        desired_caps['platformName'] = 'ANDROID'
        desired_caps['platformVersion'] = '12'
        desired_caps['deviceName'] = 'device1'
        desired_caps['udid'] = 'emulator-5554'
        desired_caps['automationName'] = 'Appium'        
        desired_caps['chromedriverExecutable'] = 'D:\Test_Appium\chromedriver.exe'
        desired_caps['appPackage'] = 'com.xxx.xxxx'
        desired_caps['appActivity'] = 'com.xxx.xxxx'
        desired_caps['unicodeKeyboard'] = True
        desired_caps['resetKeyboard'] = True
        desired_caps['autoWebview'] = True
        desired_caps['noReset'] = True
 
 
        self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
 
    def testRun(self):      
 
        driver = self.driver       
        wait = WebDriverWait(driver, 20)
        # switch to webview
        webview = driver.contexts[1]
        driver.switch_to.context(webview)
        mainloginbtn = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#topArea > nav > ul > li.xans-element-.xans-layout.xans-layout-statelogoff > a')))
        mainloginbtn.click()
         
        id = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#member_id')))       
        id.click()
        id.send_keys('toast')
         
        pw = driver.find_element(By.CSS_SELECTOR, '#member_passwd')
        pw.click()
        pw.send_keys('1234')
         
        loginbtn = driver.find_element(By.CSS_SELECTOR, '#member_login_module_id > div > fieldset > div > div.ec-base-button.gFull > button')
        loginbtn.click()
         
        sleep(8)
 
    def tearDown(self):
        self.driver.quit()
  
if __name__ == '__main__':
    suite = unittest.TestLoader().loadTestsFromTestCase(LoginTest)
    unittest.TextTestRunner(verbosity=2).run(suite)

'APP Test > Appium' 카테고리의 다른 글

Linux 자동화 환경 구성  (0) 2022.06.07
Appium Automation Framework from Java, Maven, TestNG  (0) 2020.08.10
블로그 이미지

정신차려이각박한세상속에서

,

환경정보

  • Ubuntu

 

작업 절차

1. NVM(Node Version Manager 설치)

  • 아래 명령어를 통한 설치 스크립트 실행
$ wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

$ source /home/toast/.bashrc
  • 설치 가능한 버전 확인
$ nvm ls-remote
  • 아래의 명령어로 최신 버전 설치
$ nvm install v16.15.0
  • NPM 버전 확인
$ npm -v

 

2. Appium 설치

  • 아래의 명령어로 앱피움 설치
$ npm install -g appium
  • 앱피움 닥터 설치 후 실행으로 앱피움 실행 패키지 검사 확인
$ npm install -g appium-doctor
  • java 관련 jre 설치 및 확인
$ sudo apt install default-jre
 
$ java --version

 

3. Android Command Line Tools 설치 및 환경 변수 설정

$ mkdir -p Android/Sdk
toast@toast:~/Android/Sdk$ unzip commandlinetools-linux-8092744_latest.zip
  • 압출 파일을 아래 폴더에 이동
$ cd cmdline-tools/
$ mkdir latest
$ mv bin/ latest/
$ mv lib/ latest/
$ mv NOTICE.txt  latest/
$ mv source.properties  latest/
  • sdk manager 리스트 확인
$ cd /home/toast/Android/Sdk/cmdline-tools/latest/bin/
$ sdkmanager --list
  • 필요한 패키지 설치
$ sdkmanager "platform-tools" "emulator" "build-tools;30.0.3"
  • home 디렉토리에서 환경 변수 설정
$ cd ~
$ vi .bashrc
하단에 아래 내용 추가
export ANDROID_HOME="$HOME/Android/Sdk"
export JAVA_HOME="/usr/lib/jvm/default-java"
 
export ADB="$ANDROID_HOME/plaform-tools/adb"
 
$ source .bashrc

 

4. Python Appium Client 설치

  • 파이썬 스크립트에 포함된 모듈 설치
$ sudo apt install python-pip
$ pip install Appium-Python-Client==0.52

 

5. Appium 실행

  • 아래의 명령어()로 앱피움 서버 실행
$ appium -p 4725

예뮬레이터 환경구성

1. 환경변수 확인 및 사전작업

  • 환경변수 확인
$ cd ~
$ vi .bashrc
 
export ANDROID_HOME="$HOME/Android/Sdk"
export ANDROID_SDK_ROOT="$HOME/Android/Sdk"
export ANDROID_SDK_HOME="$HOME/Android/Sdk"
export ANDROID_AVD_HOME="$HOME/.android/avd"
 
export JAVA_HOME="/usr/lib/jvm/default-java"
 
export ADB="$ANDROID_HOME/platform-tools/adb"
 
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$JAVA_HOME/bin
export PATH=$PATH:$JAVA_HOME/emulator
 
$ source .bashrc
  • 필요 패키지 다운로드(안드로이드 버전은 맞춰서 다운)
$ cd /home/toast/Android/Sdk/cmdline-tools/latest/bin/
$ ./sdkmanager "system-images;android-25;google_apis;armeabi-v7a" "platforms;android-25"
  • 라이센스 동의
$ ./sdkmanager --licenses

 

2. 예뮬레이터 생성 및 실행

  • 예뮬레이터 생성(다운받은 패키지 버전을 실행시키면 된다)
$ cd /home/toast/Android/Sdk/cmdline-tools/latest/bin/
$ echo "no" | ./avdmanager create avd -n test -k "system-images;android-25;google_apis;armeabi-v7a"
  • 생성된 예뮬레이터 리스트 확인
$ cd /home/toast/Android/Sdk/emulator
$ emulator -list-avds
test
  • 예뮬레이터 실행(case1. GPU모드)
$ cd /home/toast/Android/Sdk/emulator
$ ./emulator -avd test -no-audio -no-boot-anim -accel on -gpu swiftshader_indirect
  • 예뮬레이터 실행(case2. 헤드레스모드)
    • emulator -avd {EMULATOR_NAME} -no-window
$ cd /home/toast/Android/Sdk/emulator
$ emulator -avd test -no-window

 

'APP Test > Appium' 카테고리의 다른 글

Hybrid App 스크립트 작성  (0) 2022.06.07
Appium Automation Framework from Java, Maven, TestNG  (0) 2020.08.10
블로그 이미지

정신차려이각박한세상속에서

,

[사전 작업]

Java JDK

Appium is installed

Android sdk is setup (for testing on android )

Xcode is setup (for testing on iOS)

Mobile device is ready for automation

Eclipse is installed

 

 

Appium 설치 관련

https://dejavuqa.tistory.com/222

 

Appium 서버 구성 (on Windows)

app 자동화 테스트를 위해 Windows에 Appium을 설치해 보겠습니다. 먼저 Java JDK를 설치해야 합니다. PC에 Java가 설치되어 있다면 넘어가셔도 됩니다. 아래 Oracle에 가서 JDK 8 Windows 버전을 다운로드 합니

dejavuqa.tistory.com

 

[관련환경 변수]

ANDROID_HOME=C:\Users\toast\AppData\Local\Android\Sdk
CLASSPATH=C:\Program Files\Java\jdk1.8.0_261\lib;.;
JAVA_HOME=C:\Program Files\Java\jdk1.8.0_261
MAVEN=C:\apache-maven-3.6.3-bin\apache-maven-3.6.3
MAVEN_HOME=C:\apache-maven-3.6.3-bin\apache-maven-3.6.3
Path=C:\apache-maven-3.6.3-bin\apache-maven-3.6.3\bin;C:\Program Files\Java\jdk1.8.0_261\bin;C:\Users\toast\AppData\Local\Android\Sdk;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Users\toast\AppData\Local\Android\Sdk\platform-tools;F:\Tools\gradle-6.5.1-bin\bin

 

 

Install TestNG in Eclipse

아래 URL 들어가서 "Online Update-Site" 복사

https://github.com/cbeust/testng-eclipse/

 

cbeust/testng-eclipse

Eclipse plug-in for TestNG. Contribute to cbeust/testng-eclipse development by creating an account on GitHub.

github.com

 

[이클립스]

Help > Install New Software > Add.. 클릭 후 아래와 같이 작성

 

 

 

Create a new maven project

Add required lib/dependencies

maven을 이용한 아래의 라이브러리를 불러오기

Appium java client

Selenium java

TestNG

[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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.appium.Demo</groupId>
  <artifactId>AppiumDemoProject</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>POMframework</name>
  <url>http://maven.apache.org</url>
    
   <properties>
                        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>

            <repositories>
                        <repository>
                                    <id>spring-releases</id>
                                    <name>Spring Releases</name>
                                    <url>https://repo.spring.io/libs-release</url>
                        </repository>
            </repositories>
            <pluginRepositories>
                        <pluginRepository>
                                    <id>spring-releases</id>
                                    <name>Spring Releases</name>
                                    <url>https://repo.spring.io/libs-release</url>
                        </pluginRepository>
            </pluginRepositories>
  
  
<dependencies>

	<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
	<dependency>
	    <groupId>org.seleniumhq.selenium</groupId>
	    <artifactId>selenium-java</artifactId>
	    <version>3.141.59</version>
	</dependency>
	
	<!-- https://mvnrepository.com/artifact/io.appium/java-client -->
	<dependency>
	    <groupId>io.appium</groupId>
	    <artifactId>java-client</artifactId>
	    <version>7.3.0</version>
	</dependency>
	
	<!-- https://mvnrepository.com/artifact/org.testng/testng -->
	<dependency>
	    <groupId>org.testng</groupId>
	    <artifactId>testng</artifactId>
	    <version>7.1.0</version>
	    <scope>compile</scope>
	</dependency>

</dependencies>

<build>
                        <plugins>
                                    <!-- Compiler plug-in -->
                                    <plugin>
                                                <groupId>org.apache.maven.plugins</groupId>
                                                <artifactId>maven-compiler-plugin</artifactId>
                                                <version>3.8.1</version>
                                                <configuration>
                                                            <source>1.8</source>
                                                            <target>1.8</target>
                                                </configuration>
                                    </plugin>
                                    
                                    <!-- Below plug-in is used to execute tests -->
                                    <plugin>
                                                <groupId>org.apache.maven.plugins</groupId>
                                                <artifactId>maven-surefire-plugin</artifactId>
                                                <version>2.18.1</version>
                                                <configuration>
                                                            <suiteXmlFiles>
                                                                        <!-- TestNG suite XML files -->
                                                                        <suiteXmlFile>testng.xml</suiteXmlFile>
                                                            </suiteXmlFiles>
                                                </configuration>
                                    </plugin>
                        </plugins>
 </build>

</project>

위의 내용은 아래 그림과 같이 mavenrepository에서 참고하여 복붙함

https://mvnrepository.com/ 에서 해당 library 검색

 

Save - Clean - Build project

자동으로 Maven이 해당 dependency를 참고하여 자동으로 관련 라이브러리가 추가된다

 

 

Create tests folders under src/main/java

User src/test/resources create a folder

 

 

Inside tests folder create a class - BaseClass

[BaseClass.java]

package baseClass;

import java.io.File;
import java.net.URL;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

import io.appium.java_client.AppiumDriver;
import io.appium.java_client.MobileElement;

public class BaseClass {

    protected AppiumDriver<MobileElement> driver;

    @BeforeTest
    public void setup()  {
    	
        try {

      	File classpathRoot = new File(System.getProperty("user.dir"));
    	File appDir = new File(classpathRoot, "\\src\\test\\resources\\apps");
		File app = new File(appDir, "app-release-unsigned.apk");           	

        DesiredCapabilities cap = new DesiredCapabilities();
        cap.setCapability("deviceName", "sdk_gphone_x86");  //Phone model number
        cap.setCapability("udid", "emulator-5554");
        cap.setCapability("platformName", "Android");
        cap.setCapability("platformVersion", "11");
        cap.setCapability("app", app.getAbsolutePath());
        cap.setCapability("appPackage", "corp.doha.mypt");
        cap.setCapability("appActivity", "corp.doha.mypt.activity.StartActivity");
        
        URL url = new URL("http://localhost:4723/wd/hub");      

        driver = new AppiumDriver<MobileElement>(url, cap);
        driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
        driver.hideKeyboard();        
        Thread.sleep(5000);

        } catch(Exception exp) {
            System.out.println("Cause is : "+exp.getCause());
            System.out.println("Cause is : "+exp.getMessage());
            exp.printStackTrace();
        }

    }

  @Test
  public void sampleTest() {
      System.out.println("I am inside sample Test");
  }

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

}

adb devices는 android studio를 이용해서 에뮬로 돌렸음

Desired Capabilities 관련 정보 얻는 방법은 아래 URL 참고

 

https://medium.com/@ivantay2003/appium-desired-capabilities-basic-cheat-sheet-to-launch-mobile-application-ios-android-75b664367031

 

Appium Desired Capabilities — Basic Cheat Sheet to Launch Mobile Application (iOS / Android)

Article is published and is updated as of 1st October 2019. This information may be outdated by the time you read it.

medium.com

 

 

Add test class and extend BaseClass

[TestScript1.java]

package testScripts;

import org.openqa.selenium.By;
import org.testng.annotations.Test;

import baseClass.BaseClass;
import io.appium.java_client.MobileElement;

public class TestScript1  extends BaseClass{
	
	@Test
	public void Login() throws InterruptedException{
		
//		MobileElement Inputid = driver.findElement(By.id("corp.doha.mypt:id/input_id"));		
//		Inputid.sendKeys("test");	
//		MobileElement Inputpw = driver.findElement(By.id("corp.doha.mypt:id/input_password"));		
//		Inputpw.sendKeys("test");				
		MobileElement Login = driver.findElement(By.id("corp.doha.mypt:id/button_login"));		
		Login.click();		
		System.out.println("Completed Test Login...");
		Thread.sleep(5000);
		
	}
	
}

 

위의 스크립트는 아래 API 문서 참고

http://appium.io/docs/en/about-appium/api/#appium-api-documentation

 

API Documentation - Appium

From here you can search these documents. Enter your search terms below.

appium.io

 

 

 Run & Test

1. Run Appium Server

2. Run TestScript1.java

 

 

[참고]

1. appium server 관련

아래와 같은 오류 대응은 아래 URL 참고하자

An unknown server-side error occurred while processing the command.
Original error: unknown error: Chrome version must be >= 55.0.2883.0

http://appium.io/docs/en/writing-running-appium/web/chromedriver/

 

Using Chromedriver - Appium

From here you can search these documents. Enter your search terms below.

appium.io

 

 

 

'APP Test > Appium' 카테고리의 다른 글

Hybrid App 스크립트 작성  (0) 2022.06.07
Linux 자동화 환경 구성  (0) 2022.06.07
블로그 이미지

정신차려이각박한세상속에서

,