苹果脚本没有被机器人框架通过终端

时间:2018-05-18 04:36:07

标签: python applescript robotframework

我在自定义库中编写了一个函数,它根据参数在mac机器上激活我的app,下面是代码

activate_product_window(self,myappname):
    as = '''
        tell application "{0}"
             activate
             delay 1
        end tell
        '''.format(myappname)
     print (as)
     p = Popen(['osascript', '-'], stdin=PIPE, stdout=PIPE, stderr=PIPE)
     stdout, stderr = p.communicate(as)

当我通过直接调用调用实例执行它时工作正常,但是当我通过 test.robot 文件调用它时,它无效。

我在test.robot中调用它:

robot -d Results --variable product:"myappname" --variable  test.robot

test.robot文件:

*** Settings ***
Documentation    This is Test
Library          Selenium2Library
Library          ..\\..\\Libraries\\filename.py

*** Variables ***

${product}      ${EMPTY}


*** Test Cases ***

First Test
     [Documentation]            This is First Test Case
     Open Product               ${product}
     Activate Product Window    ${product}

有人可以告诉我,我们是否可以通过 robotframework 让它工作。

我的产品名称中包含空格示例:ABC DD EE 11。我在终端中将其作为"ABC DD EE 11"传递,然后AppleScript代码无效,但如果我在 test.robot 文件中将其硬编码为ABC${SPACE}DD${SPACE}EE${SPACE}11,则可以正常工作。

我也尝试在命令行中通过\转义空间,但没有运气。

如果我在函数中打印as,那么它会在其中显示应用程序的正确名称,并附上引号.Below是它打印的内容,以防我将其作为"ABC DD EE 11"或{{传递给它1}}通过命令行参数或在 test.robot 文件中将其硬编码为ABC\ DD\ EE\ 11

ABC${SPACE}DD${SPACE}EE${SPACE}11

如果我将命令行参数传递为tell application "ABC DD EE 11" activate delay 1 end tell ,则会将空格和appname打印为ABC${SPACE}DD${SPACE}EE${SPACE}11

在每种情况下,当我从终端运行或直接从IDE运行时调用函数,当从带有appname硬编码的IDE运行时,它可以工作,但是当它从终端运行时它不起作用但它在执行时在日志文件中打印applescript

注意:由于公司政策,我已从帖子中删除了功能和应用名称的原始名称。

1 个答案:

答案 0 :(得分:0)

根据我的理解,问题可归结为使用时var值中缺少的空格。
正如我所见,你在命令行传递它(值);关于在那里放置特殊值有一些特殊的语法 - 使用--escape参数(link to the doc)使用另一个符号转义它们。

尝试此调用,看看它是否有效:

robot -d Results --variable product:ABC_DD_EE_11 --escape space:_  test.robot

它告诉解析器用whitespcase替换符号_(问题可能是因为shell - 或解析器 - 在他们查看案例代码之前已经吞没了#34;

此外,请在案例的开头添加此内容,以便了解您在其中获得的实际价值:

Log    The value of the var is _-${product}-_

所有这一切都基于如果您直接传递产品名称的假设 - 例如在关键字调用中对其进行硬编码,它确实按预期工作 - 对吗?像这样:

Activate Product Window    ABC DD EE 11