appium 클립보드 이용하기 > IT 기술백서

appium 자체의 set_clipboard, get_clipboard 를 이용하면 아래와 같은 에러를 뱉어내며 동작을 하지 않는다.

[code]

NotYetImplementedError: Method has not yet been implemented

[/code]

 

아마도 android 10 이상에서 클립보드를 막아놓은데서 그 이유가 있는듯 하다.

 

첨부된 파일의 압축을 풀어 apk를 폰에 설치하고 아래처럼 이용하면 된다.

adb 로 apk 설치하기 (usb로 폰을 연결한 뒤에 해야 함)

[code]

$ adb install -r clipboard.apk

[/code]

 

클립보드에 복사하기 (Python)

[code]

 

 

class MyClass():

    # …..

    # 클립보드에 복사하기

    def _copy(self, text, mode):

        self.driver.execute_script(

            ‘mobile:shell’, 

            {

                ‘command’: ‘am’,

                ‘args’: [‘start’, ‘-n’, ‘eu.micer.clipboardservice/eu.micer.clipboardservice.EmptyActivity’],

                ‘includeStderr’: True,

                ‘timeout’: 5000

            })

        self.driver.execute_script(

            ‘mobile:shell’, 

            { 

                ‘command’: ‘am’, 

                # 이건 왜인지 안된다.  아래로 대체 함

                # ‘args’: [‘startservice’, ‘-a’, ‘eu.micer.ClipboardService’, ‘-e’, ‘text’, text, ‘-e’, ‘mode’, mode], 

                ‘args’: [f’startservice -a eu.micer.ClipboardService -e text “{text}” -e mode {mode}’], 

                ‘includeStderr’: True,

                ‘timeout’: 5000

            })

    # 클립보드내용 붙여넣기

    def _paste(self):

        self.driver.press_keycode(keycode=50 , metastate=28672)[/code]

 

원하는 곳에 붙여넣기

[code]

self.driver.press_keycode(keycode=50 , metastate=28672)

[/code]

 

clipboardservice git 주소

https://github.com/micer/clipboard-service

위의 원소스에서는 text 모드만 가능해서 html 모드를 추가하여 새로 빌드하였다.

수정한 부분

app.java.eu.micer.clipboardservice.ClipboardService.kt

[code]

package eu.micer.clipboardservice

import android.app.Service

import android.content.ClipData

import android.content.ClipboardManager

import android.content.Context

import android.content.Intent

import android.os.IBinder

import android.util.Log

import org.jsoup.Jsoup

class ClipboardService : Service() {

    companion object {

        private val TAG = ClipboardService::class.java.simpleName

    }

    override fun onBind(intent: Intent): IBinder? {

        return null

    }

    override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {

        val text = intent.getStringExtra(“text”).toString()

 

        var mode = intent.getStringExtra(“mode”).toString() // 추가한 부분

        val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager

 

        

        // 추가한 부분

        if (mode == “html”) {

            val rawText: String = this.html2text(text)

            clipboard.setPrimaryClip(ClipData.newHtmlText(TAG, rawText, text))

        } else {

            clipboard.setPrimaryClip(ClipData.newPlainText(TAG, text))

        }

        stopSelf()

        return START_NOT_STICKY

    }

    

    // 추가한 부분

    private fun html2text(html: String): String {

        return Jsoup.parse(html).text();

    }

}

[/code]

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤