Сценарий Apple не запускается рамкой робота через терминал
Я написал функцию в пользовательской библиотеке, которая активирует мое приложение на компьютере 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}
Может кто-нибудь, пожалуйста, скажите мне, можем ли мы заставить его работать с помощью роботизированной системы.
В названии моего продукта есть пробелы, например: ABC DD EE 11
, Я передаю это как "ABC DD EE 11"
в терминале, то код appleScript не работает, но если я жестко закодировал его как ABC${SPACE}DD${SPACE}EE${SPACE}11
в файле test.robot, то это работает.
Также я пробовал выходить из космоса через \
в командной строке, но не повезло.
Если я распечатаю as
в функции, то он показывает собственное имя приложения в нем с кавычками. Ниже приведено то, что он печатает для входа в случае, если я передам его как "ABC DD EE 11"
или же ABC\ DD\ EE\ 11
через аргумент командной строки или жестко закодировать его как ABC${SPACE}DD${SPACE}EE${SPACE}11
в файле test.robot
tell application "ABC DD EE 11"
activate
delay 1
end tell
Если я передам аргумент командной строки как ABC${SPACE}DD${SPACE}EE${SPACE}11
затем он обрезает пространство и печатает имя приложения как ABCDDEE11
В каждом случае функция вызывается, когда я запускаю ее из терминала или напрямую из IDE, когда она запускается из IDE с жестким кодом appname, она работает, но не работает при запуске из терминала, но печатает яблочный скрипт в файле журнала, как он был выполнен.
Примечание. Из-за политики компании я удалил оригинальное название функций и название приложения из сообщения.
1 ответ
В моем понимании проблема сводится к отсутствующему пробелу в значении переменной при его использовании.
Как я вижу, вы передаете его (значение) в командной строке; есть немного особого синтаксиса в отношении размещения там специальных значений - экранирование их другим символом, использование --escape
аргумент ( ссылка на документ).
Попробуйте этот вызов и посмотрите, как это работает:
robot -d Results --variable product:ABC_DD_EE_11 --escape space:_ test.robot
Он говорит парсеру заменить символ _
с пробелом. (Проблема может быть в том, что оболочка - или анализатор - "проглотили" их, прежде чем они пришли к коду дела.)
Кроме того, добавьте это в начало кейса, чтобы вы могли увидеть, какое реальное значение вы получаете в нем:
Log The value of the var is _-${product}-_
Все это основано на предположении, что если вы передадите название продукта напрямую - например, жестко запрограммируете его в вызове ключевого слова, оно будет работать как положено - правильно? Как это:
Activate Product Window ABC DD EE 11