美文网首页
Appium UiAutomator2驱动:平台相关的mobil

Appium UiAutomator2驱动:平台相关的mobil

作者: Domibaba | 来源:发表于2023-08-13 13:07 被阅读0次

除了标准的W3C API接口,Uiautomator2还提供了一系列扩展接口来支持Android平台相关的操作。本文所有测试代码的前提是已经安装Appium和相关环境(例如JDKAndroid SDKAVD模拟器),可以参考Appium环境搭建

剪切板管理

1 设置剪切板内容

接口参数说明:

参数名称 参数类型 参数是否必须提供 描述 举例说明
content bytearray yes 待设置的剪切板内容,要转换成字节编码 hello appium
content_type string no 剪切板内容的类型,目前Android上只支持plaintext(填其他值会抛出异常),也是该接口默认值。 plaintext
label string no 标签参数,只有Android系统才支持,默认值是空 None

举例:Python下提供了两个接口,set_clipboardset_clipboard_text,两个接口区别在于set_clipboard_text入参的内容是string类型,转换成bytes类型后,以content_typeplaintextset_clipboard进行调用的版本。

# -*- coding: utf-8 -*-

import pytest
import base64

from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.webdriver.appium_service import AppiumService
from appium.webdriver.clipboard_content_type import ClipboardContentType

# 开启服务端
APPIUM_HOST = '127.0.0.1'
APPIUM_PORT = 4723
@pytest.fixture(scope="session")
def start_appium_service():
 server = AppiumService()
 server.start(args=['--address', APPIUM_HOST, '-p', str(APPIUM_PORT)], timeout_ms=60000)
 yield server
 server.stop()

# 创建客户端到服务端的会话
def create_appium_session_by_api(custom_opts = None, appium_host = APPIUM_HOST, appium_port = APPIUM_PORT):
 options = UiAutomator2Options()
 if custom_opts is not None:
 options.load_capabilities(custom_opts)
 return webdriver.Remote(f'http://{appium_host}:{appium_port}', options=options)


def test_set_clipboard(start_appium_service):
 custom_opts = {
 "appium:avd": "testPhone",
 }

 driver = create_appium_session_by_api(custom_opts)

 data = "hello appium"
 driver.set_clipboard(data.encode('utf-8')) # 注意要将string类型转换成bytes类型

 driver.quit()

执行完后,在模拟器上可以看到剪切板的内容。

2 获取剪切板内容

接口参数说明:

参数名称 参数类型 参数是否必须提供 描述 举例说明
content_type string no 剪切板内容的类型,目前Android上只支持plaintext(填其他值会抛出异常),也是该接口默认值。 plaintext

该接口返回的是被测设备剪贴板经过base64编码后的内容。

举例:Python下提供了两个接口,get_clipboardget_clipboard_text,两个接口区别在于:get_clipboard返回的是字节编码流,而get_clipboard_text是使用content_typeplaintextget_clipboard进行调用,并且将获取到的字节编码流使用decode("utf-8")进行解码的版本。

def test_get_clipboard(start_appium_service):
 custom_opts = {
 "appium:avd": "testPhone",
 }

 driver = create_appium_session_by_api(custom_opts)

 data = "hello android"
 driver.set_clipboard_text(data) # 类型是string
 content_bytes = driver.get_clipboard(ClipboardContentType.PLAINTEXT)
 assert content_bytes.decode('UTF-8') == data
 assert driver.get_clipboard_text() == data

 driver.quit()

相关文章

网友评论

      本文标题:Appium UiAutomator2驱动:平台相关的mobil

      本文链接:https://www.haomeiwen.com/subject/gpwfmdtx.html