欢迎光临散文网 会员登陆 & 注册

Appium自动化测试微信小程序driver.set_clipboard_text('Clipboard data')方法报错

2023-06-30 21:36 作者:怠惰の于  | 我要投稿

在使用Appium自动化测试微信小程序时,需要用到提前将内容设置到剪切板,但因为微信小程序大多无法用网页打开,也就意味着它是WebView,而在WebView中Appium的一部分api将无法使用,包括设置剪切板内容driver.set_clipboard_text(),报错内容如下:

raceback (most recent call last): File "D:\Code\FormAuto\app1.py", line 321, in <module> driver.set_clipboard_text("55566") File "D:\Code\FormAuto\venv\lib\site-packages\appium\webdriver\extensions\clipboard.py", line 61, in set_clipboard_text return self.set_clipboard(bytes(str(text), 'UTF-8'), ClipboardContentType.PLAINTEXT, label) File "D:\Code\FormAuto\venv\lib\site-packages\appium\webdriver\extensions\clipboard.py", line 48, in set_clipboard self.execute(Command.SET_CLIPBOARD, options) File "D:\Code\FormAuto\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 346, in execute self.error_handler.check_response(response) File "D:\Code\FormAuto\venv\lib\site-packages\appium\webdriver\errorhandler.py", line 122, in check_response raise exception_class(msg=message, stacktrace=format_stacktrace(stacktrace)) selenium.common.exceptions.UnknownMethodException: Message: Method has not yet been implemented Stacktrace: NotYetImplementedError: Method has not yet been implemented at AndroidUiautomator2Driver.executeCommand (D:\Node\node_global\node_modules\appium\node_modules\appium-base-driver\lib\basedriver\driver.js:328:13) at AppiumDriver.executeCommand (D:\Node\node_global\node_modules\appium\lib\appium.js:563:36) at runMicrotasks (<anonymous>) at processTicksAndRejections (node:internal/process/task_queues:96:5) at asyncHandler (D:\Node\node_global\node_modules\appium\node_modules\appium-base-driver\lib\protocol\protocol.js:297:21)

简单来说,就是WebView不支持driver.set_clipboard_text()方法。

简单来说,就是WebView不支持driver.set_clipboard_text()方法。

解决办法有两个:

1.用adb进行操作:

   command = f"adb shell input text {text}"    os.system(command)

这个方法直接跨过了WebView和NATIVE_APP的限制,可以在任何应用上使用,但弊端是不支持中文,如果你需要剪切的内容没有中文,那adb是最好的选择,因为它通用性很广,如果内容有中文,也可以通过uncode编码来转换,但会比较麻烦。

2.WebView和NATIVE_APP之间来回切换:

因为driver.set_clipboard_text()只是无法在.WebView中执行,那我切回来剪切,弄完了在换回去,具体操作如下:

# 在 WebView 上下文中 driver.switch_to.context('WEBVIEW_1') element = driver.find_element_by_css_selector('#form_field') element.send_keys('Form data') # 切换回 NATIVE_APP 上下文来设置剪贴板的文本 driver.switch_to.context('NATIVE_APP') driver.set_clipboard_text('Clipboard data') # 再次切换到 WebView 上下文来继续 driver.switch_to.context('WEBVIEW_1') other_element = driver.find_element_by_css_selector('#other_form_field') other_element.send_keys('More form data')

该方法针对的是WebView应用,弊端是局限性较大。

Appium自动化测试微信小程序driver.set_clipboard_text('Clipboard data')方法报错的评论 (共 条)

分享到微博请遵守国家法律