Сценарий 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
Другие вопросы по тегам