Ошибка доступа к переменной после обновления версии платформы Python и Robot - PullRequest
0 голосов
/ 01 марта 2019

Ниже упомянутый скрипт работал в старых версиях Python (2.7.x) и Robotframework.Тот же код не работает, после обновления версии python с 2.7 до 3.7.2 и версии робота до 3.1.1.

Я получаю эту ошибку при выполнении скрипта:

Переменная '$ {var}' является строкой, а не списком или словарем, поэтому доступ к элементу '$ {var}' из этого невозможен.

Код:

${loc}   xpath=(//*[contains(@class,"c3-legend-item ")])

: FOR    ${row}    IN RANGE    1        ${Count}
\    ${Exp_Name} =    Get Text    ${loc}[${row}]    
\   Log    ${Exp_Name}

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

В версии робота 3.1 произошла обратная несовместимость.Из заметок о выпуске :

Квадратные скобки после переменной типа $ {var} [xxx] считаются доступом к элементу

Синтаксис похож на$ {var} [xxx] теперь считается переменным доступом к элементу (# 2601), а не переменной $ {var}, за которой следует литеральная строка [xxx].Если последнее желательно, необходимо экранировать, как $ {var} [xxx].

В вашем конкретном случае вы используете ${loc}[${row}], где вы ожидаете добавления [${row}]до ${loc}.В 3.1 робот думает, что [${row}] является индексом в ${loc}.

Исправление, как предлагается в примечаниях к выпуску, состоит в том, чтобы избежать открывающей квадратной скобки:

\    ${Exp_Name} =    Get Text    ${loc}\[${row}]
0 голосов
/ 01 марта 2019

Используйте cateate для построения динамического xpath. Это будет работать для вас.

${loc}   xpath=(//*[contains(@class,"c3-legend-item ")])

: FOR    ${row}    IN RANGE    1        ${Count}

\    ${dynamic_xpath}=    Catenate    SEPARATOR=    ${loc}    [${row}]

\    ${Exp_Name} =    Get Text    ${dynamic_xpath}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...