Appium 有没有小伙伴用 AppiumForMac 做过 Mac 桌面应用 (webkit/webview) 自动化呢?application based on Electron

颜如玉 · 2018年07月09日 · 最后由 Jayvee 回复于 2019年10月21日 · 2709 次阅读

根据官网可以进行 calculator 和桌面 qq 的测试,但是我们公司的应用是 js 开发的,所以根据官网的 “AXPath” 方法获取不到元素。
像 iOS app 那样切 webview 也是失败的,只能起 driver,错误信息如下:
Traceback (most recent call last):
File "/Users/zhaona/PycharmProjects/Auto_mac_python/test/test_login.py", line 96, in
l.RCEdriver()
File "/Users/zhaona/PycharmProjects/Auto_mac_python/test/test_login.py", line 81, in RCEdriver
webview = driver.contexts.last
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/appium/webdriver/webdriver.py", line 59, in contexts
return self.execute(Command.CONTEXTS)['value']
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 312, in execute
self.error_handler.check_response(response)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/appium/webdriver/errorhandler.py", line 29, in check_response
raise wde
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/appium/webdriver/errorhandler.py", line 24, in check_response
super(MobileErrorHandler, self).check_response(response)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: Could not find selector (get_contexts:) for path '/session/8jJJiC4z/contexts'.
appium log:

望路过的各位大大,给予帮助,非常感谢

共收到 10 条回复 时间 点赞

是不是应该用 selnium 来做 electron 的自动化呢? electron 等于是给 web 套了一个像桌面程序的壳,本质还是 web,所以还是用 selenium 而不是 appium 吧

用 macaca 吧,iMac 里对 safari 支持得不错

山姆大叔 回复

谢谢建议,但是这是一个 js 开发的 pc 桌面应用,我看了 macaca 的官网介绍,并不支持桌面应用呀,您有没有做过类似的,或者有相关的连接给予分享,不胜感激

韩将 回复

谢谢,但是和纯 web 还是有一些差别的,试着用了下你说的,用了 selenium,仍然提示定位不到元素呀
下面是桌面 app 的一点截图

颜如玉 回复

macaca 当然支持 WEB,我用过,不错,用这个 macaca-electron,具体自己网上查

通常框架会对 driver 做定制开发,macaca 确实有 electron driver

from selenium import webdriver

    remote_app = webdriver.remote.webdriver.WebDriver(
                 command_executor='http://localhost:8765',
                 desired_capabilities = {'chromeOptions':{ 'binary': '/myapp'}},
                 browser_profile=None,
                 proxy=None,
                 keep_alive=False)

你这样看看能不能呢?
你现在的情况是找不到元素?还是调用不起来?
讲出你的故事,最好附上报错信息😅

韩将 回复

非常感谢您的帮助!
通过 selenium 我可以调起桌面 app,代码如下
desiredCapabilities = {'platformName': 'Mac',
'deviceName': 'Mac',
'platformVersion': '10.13.4',
'browserName': 'electron',
#'cookies': defaultCookies
}
driver = webdriver.Remote(command_executor='http://localhost:4723/wd/hub', desired_capabilities=desiredCapabilities)
print('Opening the "xxx" app')
driver.get("xxx")
但是桌面应用是基于 Electron 开发的桌面应用,现在不知道如何定位元素,通过 driver.pagesource,也没有获取到页面的任何元素,
我们公司的产品是桌面 app 哈,不是纯 web 的哈😄 所以不知道咋办了,希望大家给点意见

山姆大叔 回复

感谢🙏,不好意思又来请教了,我今天根据您说的试了一下,
import unittest
import time
from macaca import WebDriver

desired_caps = {
'platformName': 'desktop',
'browserName': 'electron',
#'app': '~/Applications/myapp'
}
server_url = {
'hostname': 'localhost',
'port': 3456
}

class MacacaTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.driver = WebDriver(desired_caps, server_url)
cls.driver.init()

@classmethod
def tearDownClass(cls):
cls.driver.quit()

def test_get_url(self):
self.driver \
.set_window_size(1280, 800) \
.get('https://github.com')

这里都是针对纯 web 的 url 的,可以我们公司的产品是 electron 打包的桌面应用,我要怎样才能转化成 url 呢,然后再去获取元素呢,增加 #'app': '~/Applications/RCE'针对手机 app,不知道怎么起应用了,我还需要怎么做呢,望知道,十分感谢

spectron 了解一下? 可以测类似 VSCode 的桌面应用

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册