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]