추후 모바일 환경을 테스트 하기 위한
appium 서버를 구축하고 java 와 통신하며 app 및 web 을 테스트 하기 위한 환경을 구축 하였다.
아마 웹 개발자들한테는 생소할 수 있는데
모바일 환경 앱 및 웹을 테스트 할 때 주로 쓰인다고 한다.
언어는 Java, Python, Ruby, JS 지원하니 모바일 디바이스 개발을 많이 하시는 분들이라 하면
유용한 테스트 도구 인 것 같다. 😄
* appium (앱이움) : Appium 은 웹 드라이버를 사용하여 Android 또는 iOS 에서 스크립트를 실행하고 기본 애플리케이션, 모바일 웹 애플리케이션 및 하이브리드 애플리케이션을 테스트하기 위한 오픈 소스 자동화 도구입니다.
appium 저장소에 이슈 남겼더니..
해당 개발자가 플러그인을 개발해주었다.
아직 확인은 못해봤지만 참조 레퍼런스에 남겨놓았으니 필요한 사람들은 테스트를 도와주고 문제가 있을 시 이슈 등록하여 피드백 해주면 좋을 것 같다.
진행상황
appium Server 구축 통신 확인
java 코드로 모바일 환경에서 브라우저 이동 또는 앱 실행 확인
이슈 & 고민 및 해결
1. appium java-client는 cdp를 지원하지 않고 있다.
=> 관련 이슈 링크
2. cdp와 통신하기 위한 방법을 찾아야 한다. 현재로서는 어려운 상황 😥
통신 방법을 찾지 못한다면 결국 웹앱을 하나 만들어서 확인하는 방법 외에는 없는 것으로 생각된다.. 😭
plugins {
id 'java'
id 'org.springframework.boot' version '3.1.3'
id 'io.spring.dependency-management' version '1.1.3'
}
group = 'com.acp'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '4.12.1'
implementation group: 'io.github.bonigarcia', name: 'webdrivermanager', version: '5.5.3'
implementation 'org.seleniumhq.selenium:selenium-http-jdk-client:4.9.1'
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.15.2'
implementation group: 'io.appium', name: 'java-client', version: '8.5.1'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.batch:spring-batch-test'
}
tasks.named('test') {
useJUnitPlatform()
}
참고 레퍼런스
https://appium.io/docs/en/2.1/
Appium Documentation - Appium Documentation
Appium Documentation Welcome to the Appium documentation! Appium is an open-source project and ecosystem of related software, designed to facilitate UI automation of many app platforms, including mobile (iOS, Android, Tizen), browser (Chrome, Firefox, Safa
appium.io
https://github.com/appium/java-client
GitHub - appium/java-client: Java language binding for writing Appium Tests, conforms to W3C WebDriver Protocol
Java language binding for writing Appium Tests, conforms to W3C WebDriver Protocol - GitHub - appium/java-client: Java language binding for writing Appium Tests, conforms to W3C WebDriver Protocol
github.com
https://github.com/appium/appium-desktop/releases
Releases · appium/appium-desktop
Appium Server in Desktop GUIs for Mac, Windows, and Linux - appium/appium-desktop
github.com
https://github.com/mykola-mokhnach/appium-devtools-plugin
GitHub - mykola-mokhnach/appium-devtools-plugin: Appium plugin that adds proxy features to Android mobile webviews
Appium plugin that adds proxy features to Android mobile webviews - GitHub - mykola-mokhnach/appium-devtools-plugin: Appium plugin that adds proxy features to Android mobile webviews
github.com
TO DO List
1. appium cdp 소켓 통신 확인하기
2. 1이 안될 경우 insept로 가상 디바이스 접근하여 확인하기
Example Code
디바이스가 크롬 app을 실행한 후 해당 블로그로 이동하는 코드 sample code
package com.acp.AbusingCheckProject.job;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.options.UiAutomator2Options;
import io.appium.java_client.remote.MobileCapabilityType;
import org.openqa.selenium.devtools.DevTools;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.net.URL;
import java.time.Duration;
@Component
public class NetworkMonitoringMobile {
@Scheduled(fixedRate = 500000000)
public void executeNetworkMonitoring() throws Exception {
AppiumDriver driver = setupMobileWeb();
driver.get("https://djlife.tistory.com/");
}
private AppiumDriver setupMobileWeb() {
UiAutomator2Options capabilities = new UiAutomator2Options();
capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "14");
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "emulator-5554");
capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "UiAutomator2");
capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, "Chrome");
capabilities.setCapability("chromedriverExecutable", System.getProperty("webdriver.chrome.driver"));
// Open browser.
AppiumDriver driver = null;
try{
driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"),capabilities);
}catch (Exception e){
e.printStackTrace();
}
driver.manage()
.timeouts()
.implicitlyWait(Duration.ofSeconds(60));
return driver;
}
}
'Develop > Back-End' 카테고리의 다른 글
스프링 배치(Spring Batch) 시작하기 !😭 (131) | 2024.02.03 |
---|---|
스프링 부트 카카오 로그인 API 기능 추가하기 😳 (114) | 2023.10.22 |
Selenium 을 이용하여 특정 URL 요청과 응답 값 모니터링 하는 기능 만들기 (77) | 2023.09.07 |
타임리프(Thymeleaf) 본격적으로 사용하기 ( +@ 타임리프 벤치마크 성능 비교) (59) | 2023.08.31 |
JAVA 에서 FFMPEG를 통한 영상 정보 읽기 및 영상 인코딩(압축) 처리 도전기 (61) | 2023.08.16 |