我在自定义库中编写了一个函数,该函数基于参数在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
,那么它在其中显示了应用程序的正确名称,并附加了引号,.Below就是它所打印的登录方式,以防我通过命令行参数传递它为"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
传递,那么它会将空格和名称打印裁剪为ABCDDEE11
。
在每种情况下,函数都是在我从终端运行或直接从IDE运行时调用的,从IDE运行时使用的是应用程序名硬代码,但在从终端运行时它不工作,而是在执行时将applescript打印在日志文件中。
注:由于公司政策,我已经从帖子中删除了原来的函数名和应用程序名。
发布于 2018-05-18 20:16:59
根据我的理解,问题归结为使用var值时缺少的空格。
正如我所看到的,您正在命令行上传递它(值);在那里放置特殊值有一些特殊的语法--使用--escape
参数(链接到文档)用另一个符号转义它们。
尝试这个调用,看看它是否起了作用:
robot -d Results --variable product:ABC_DD_EE_11 --escape space:_ test.robot
它告诉解析器用一个白大小写替换符号_
。(问题可能是因为shell (或解析器)在找到案例代码之前“吞下”了它们。)
另外,在案例的开头添加以下内容,这样您就可以看到实际值是什么:
Log The value of the var is _-${product}-_
所有这些都是基于这样的假设:如果您直接传递产品名称--例如,在关键字调用中对其进行硬编码,它确实会按预期工作--对吗?如下所示:
Activate Product Window ABC DD EE 11
https://stackoverflow.com/questions/50403868
复制