Сценарий Apple не запускается рамкой робота через терминал - PullRequest
0 голосов
/ 18 мая 2018

Я написал функцию в пользовательской библиотеке, которая активирует мое приложение на компьютере 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.robotfile:

*** 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 не работает, но если я жестко закодировал его как 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 file

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

Если я передаю командустроковый аргумент как ABC${SPACE}DD${SPACE}EE${SPACE}11, затем он обрезает пространство и печатает имя приложения как ABCDDEE11

В каждом случае функция вызывается, когда я запускаю ее из терминала или напрямую из IDE, когда запускается из IDE с жестким кодом appname, она работаетно он не работает при запуске из терминала, но печатает яблочный скрипт в файле журнала, как он был выполнен.

Примечание: я удалил оригинальное имя функций и имя приложения из сообщения из-за политики компании.

1 Ответ

0 голосов
/ 19 мая 2018

В моем понимании проблема сводится к отсутствующему пробелу в значении переменной при его использовании.
Как я вижу, вы передаете его (значение) в командной строке;есть немного особого синтаксиса в отношении помещения туда специальных значений - экранирование их другим символом с использованием аргумента --escape ( ссылка на документ ).

Попробуйте этот вызов,и посмотрите, делает ли это трюк:

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

Он говорит парсеру заменить символ _ на белый. (Проблема может заключаться в том, что оболочка - или синтаксический анализатор - «проглотили» их, прежде чем они пришли к коду дела.)

Кроме того, добавьте это в начале делаТаким образом, вы можете увидеть, какое реальное значение вы получаете в нем:

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

Все это основано на предположении, что если вы передадите название продукта напрямую - например, жестко запишите его включевое слово call, оно работает как положено - правильно?Как это:

Activate Product Window    ABC DD EE 11
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...