我在自定义库中编写了一个函数,它根据参数在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
注意:由于公司政策,我已从帖子中删除了功能和应用名称的原始名称。
答案 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