【问题标题】:apple script not getting executed by robot framework through terminal机器人框架没有通过终端执行苹果脚本
【发布时间】:2018-10-28 10:55:35
【问题描述】:

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

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,那么它会在其中显示应用程序的正确名称,并附有引号。如果我通过命令行将其作为"ABC DD EE 11"ABC\ DD\ EE\ 11 传递,以下是它打印的日志参数或在 test.robot 文件中将其硬编码为 ABC${SPACE}DD${SPACE}EE${SPACE}11

tell application "ABC DD EE 11"
     activate
     delay 1
end tell

如果我将命令行参数作为ABC${SPACE}DD${SPACE}EE${SPACE}11 传递,那么它会修剪空格并将appname 打印为ABCDDEE11

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

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

【问题讨论】:

  • 请至少在机器人框架中添加您如何称呼它的信息。那显然是一个python代码;您是否将它作为库导入,您如何调用它(例如,它在函数内部,并被称为关键字) - 没有这个问题将被否决/标记/关闭为低质量/太宽泛。
  • 如果您不向我们展示机器人脚本,我们将无法帮助解决机器人脚本的问题。请创建一个minimal reproducible example
  • @Todor 我已经用相关细节更新了这个问题。如果需要任何其他详细信息,请告诉我
  • @BryanOakley 我已经用相关细节更新了问题
  • 更新后的问题好多了,谢谢。其中大部分是“变量值中的空白在使用时被修剪”,对吗?我会全力以赴的。

标签: python applescript robotframework


【解决方案1】:

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

试试这个调用,看看有没有效果:

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

它告诉解析器用 whitespcase 替换符号 _(问题可能是因为 shell - 或解析器 - 在它们进入案例代码之前“吞下了”它们。)

另外,在案例的开头添加这个,这样你就可以看到你得到的实际价值是什么:

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

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

Activate Product Window    ABC DD EE 11

【讨论】:

    猜你喜欢
    • 2016-07-29
    • 1970-01-01
    • 2016-08-09
    • 2020-07-14
    • 2019-10-12
    • 2017-05-26
    • 2019-07-01
    • 2019-01-14
    • 2015-02-18
    相关资源
    最近更新 更多