Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python脚本执行现有的Cocoa应用程序_Python_Objective C_Cocoa_Pyobjc - Fatal编程技术网

使用python脚本执行现有的Cocoa应用程序

使用python脚本执行现有的Cocoa应用程序,python,objective-c,cocoa,pyobjc,Python,Objective C,Cocoa,Pyobjc,我试图学习如何使用python和pyObjC为我们的Cocoa-Objective C代码库自动化应用程序测试 我发现了大量关于如何使用pyObjC重新创建objective C应用程序的示例,但是,这涉及到使用objective C框架和类在python中重新编写应用程序。我找不到任何使用python或pyObjC执行Cocoa应用程序或组件的示例 我有一个自定义框架。它包含一个WindowController,它是编辑器的入口点。当我在cocoa应用程序中初始化它并单击按钮时,它会出现,我可

我试图学习如何使用python和pyObjC为我们的Cocoa-Objective C代码库自动化应用程序测试

我发现了大量关于如何使用pyObjC重新创建objective C应用程序的示例,但是,这涉及到使用objective C框架和类在python中重新编写应用程序。我找不到任何使用python或pyObjC执行Cocoa应用程序或组件的示例

我有一个自定义框架。它包含一个WindowController,它是编辑器的入口点。当我在cocoa应用程序中初始化它并单击按钮时,它会出现,我可以与它交互

按照这里的示例,我可以成功初始化窗口控制器并使其显示,但是,我无法与任何控件交互,包括关闭窗口按钮

我的片段:

#!/usr/bin/env python

# Opens the Window

import time
from Foundation import *

bundle = NSBundle.bundleWithPath_('/Library/Frameworks/MyFramework.framework')
controller = bundle.classNamed_('MyController').alloc().initWithWindowNibName_('MyWindow')
controller.showWindow_(0)

# Hold the window open for a bit
time.sleep(20.0)
我还试图补充:

from AppKit import *
NSApplicationLoad()
True
我想这可能会有帮助,但没有。我确信缺少的是,实际的Cocoa应用程序从未被执行过,但我似乎找不到解决方案

我的目标不是用python重写Objective C。。它可以帮助我们的QA人员自动化一些应用程序间测试


非常感谢您的指导。

您当然不必用python“重写”应用程序来使用PyObjC。您可以愉快地在现有的objective-C应用程序中使用PyObjeC insite.Ahh。这不正是我想做的吗?我不认为我需要在我的objective C应用程序中执行python代码,我需要使用python scripts.mkay、
time执行Cocoa应用程序的功能部分。sleep(20.0)
将暂停你的应用程序,因此很明显,当它处于睡眠状态时,你将无法与它交互。您需要启动应用程序的主运行循环<代码>NapplicationMain()需要在
NapplicationLoad()
之后调用。我把sleep放在那里是因为出于某种原因,窗口在脚本中只会出现一秒钟,但当我在终端中输入相同的代码时,它会一直保留,直到我键入exit(),我明白为什么要放在那里,但这不是sleep的工作方式。当您的进程休眠时,它不会获取任何事件或进行任何类型的处理,因此出于您的目的将其放在那里是毫无价值的。