Robot Framework: два цикла, повторяющие разные значения и записывающие в ожидаемые строки Excel на основе этих значений - PullRequest
1 голос
/ 28 октября 2019

Я пытаюсь продемонстрировать запуск двух циклов for в Robot Framework для обработки различных значений в этих циклах и записи значений из переменной списка в файл Excel.

Этот простой тест для демонстрации в настоящее время проходит и действительнорегистрирует разные значения из этих разных циклов, но пока не ведет себя правильно, когда дело доходит до записи в файл Excel.

Я создал переменную списка @ {valueslist}, содержащую 3 значения: Значение списка 0 , Значение списка 1 и Значение списка 2 .

Идея состояла бы в том, чтобы записать значение Listvalue 0 в строку 5 Excel, значение Listvalue 1 в строку 6 Excel и значение List Listue 2 в строку 7. Excel. Все строки в столбце № 0. Лист в файле Excel назван Listvalues ​​.

Почему строки 5-7, а не, например, 0-2 в начале файла Excel?

Основная идея здесь состоит в том, чтобы продемонстрировать разные значения, обрабатываемые разными циклами, потому что значения для @ {valueslist} и значения для строк Excel могут отличаться во многих случаях позже, как в этом случае демонстрации этого. Было бы проще писать в Excel строки 0-2, потому что значения в этом случае такие же, как INDEX в диапазоне цикла. На самом деле это уже работает, но сейчас я пытаюсь проверить различные значения для строк Excel (INDEX) и i-values ​​из @ {valueslist}.

В настоящее время моя проблема заключается в том, что ожидаемые строки 5-7 в Excelстолбец 0 записывается и сохраняется как новый файл Excel (сохранение как новый файл Excel работает), но для каждой строки от 5 до 7 записывается значение Listvalue 2 (тогда значение i равно 2) вместо значений i, равных 0-2Listvalue 0, Listvalue 1 и Listvalue 2, поэтому только последнее последнее значение i записывается в Excel три раза и не отличается от значения для каждой строки, как ожидалось, поэтому записывающая часть работает неправильно, хотя ожидаемые строки записываются. Просто с неправильными значениями, потому что Listvalue 2 повторяется три раза. Должно быть, эти два цикла работают не так, как ожидалось.

В Robot я сначала открываю файл Excel с именем Exceldemobase.xls (используется ExcelLibrary), используемый в качестве файла шаблона Excel. Затем у меня есть цикл с именем Основной цикл значений Excel , который имеет текущий диапазон от 3 до 6. Значение ИНДЕКСА там соотносится с номерами строк Excel, хотя не напрямую с такими же числовыми значениями, но ИНДЕКС предназначен для обработки строк Excel.

В главном цикле значений Excel есть еще один цикл, включенный в качестве ключевого слова с именем Внутренний цикл значений Excel . Этот цикл зацикливает значения $ {i}, и я соотносится с индексом @ {valueslist}. Как и в этом списке, есть три индекса: 0, 1, 2 (Listvalue 0, Listvalue 1, Listvalue 2 - фактические значения в этом списке).

После выполнения циклов появляется всплывающее окно выполнения паузы, предоставленноеDialogs-библиотека используется для запроса подтверждения пользователя перед записью в Excel.

My Robot Framework-code:

*** Settings ***
Library           String
Library           Dialogs
Library           ExcelLibrary

*** Variables ***
${INDEX}          0
${i}              0
@{valueslist}     Listvalue 0    Listvalue 1    Listvalue 2

*** Keywords ***
Excel Values Main Loop
    : FOR    ${INDEX}    IN RANGE    3    6
    \    Set Suite Variable    ${INDEX}
    \    Excel Values Inner Loop
    \    Log    INDEX value logged in (Excel Values Main Loop) is currently: ${INDEX}

Excel Values Inner Loop
    : FOR    ${i}    IN RANGE    0    3
    \    Log    Value of i logged in (Excel Values Inner Loop) is currently: ${i}
    \    Log    Listvalue logged in (Excel Values Inner Loop) is currently: @{valueslist}[${i}]
    \    Put String To Cell    Listvalues    0    ${INDEX+1}    @{valueslist}[${i}]
    Set Suite Variable    ${i}

Excel Values Dialog
    Pause Execution    Please press OK to write values to Excel rows

Excel Values 
    [Documentation]    This is expected to write Listvalue 0, Listvalue 1 and Listvalue 2 (only one value per row) from variable @{valueslist} to Excel-rows 5, 6 and 7.
    ...    
    Open Excel    C:/Programming/Robot_Projects/ExcelValuesDemo/Exceldemobase.xls
    Excel Values Main Loop
    Pause Execution    Press OK to save next set of values to Excel
    Save Excel    C:/Programming/Robot_Projects/ExcelValuesDemo/Exceldemofilled.xls

Я ожидал, что выходные данные для строк Excel 5-7 будут такими:
Listvalue 0 (Ожидается для Excelстрока 5)
Listvalue 1 (ожидается для Excel строки 6)
Listvalue 2 (ожидается для Excel строки 7)

Но фактические значения были:
Listvalue 2 (Записывается в строку Excel 5)
Listvalue 2 (Записывается в строку Excel 6)
Listvalue 2 (Записывается в строку 7 Excel)

Я думаю, что значение i равно 2 наконец цикла в Значения Excel Внутренний цикл , тогда это значение передается в каждую строку, но я не смог исправить эти два цикла, чтобы был ожидаемый результат. Когда я смотрю на журнал, я вижу, что значения i 0, 1 и 2 на самом деле записываются в журнал, поэтому увеличение значения i между 0 и 2 выполняется во время цикла, как и ожидалось, но по какой-то причине только последнее значение равно 2 (фактическое значение из списка для 2будучи Listvalue 2 затем) записывается в файл Excel.

1 Ответ

1 голос
/ 28 октября 2019

Я получил это для работы с ожидаемыми результатами. Решением было не использовать внутренний цикл значений Excel, включенный в основной цикл значений Excel, но добавить эту строку для увеличения значения i непосредственно в том же самом коде основного цикла:

${i}    Evaluate    ${i}+1

Я не знаюесли это возможно сделать лучше, так как я заметил, что я должен сделать i-1 в строке, которая обрабатывает запись значений в Excel:

Put String To Cell    Listvalues    0    ${INDEX+1}    @{valueslist}[${i-1}]

При выполнении i-1 начинается приращениеиз индекса 0 в переменной @ {valueslist}, что приводит к правильным результатам. Если бы мы начали увеличивать индекс 1 там, тогда [$ {i}] работал бы напрямую.

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

IОжидаемый вывод для строк Excel 5-7:
Значение списка 0 (ожидается для строки 5 Excel)
Значение списка 1 (ожидается для строки 6 Excel)
Значение 2 списка (ожидается для строки 7 Excel)

Фактические значения на этот раз были:
Listvalue 0 (Получает запись в строку Excel 5)
Listvalue 1 (Получает запись в строку 6 Excel)
Listvalue 2 (Получает запись в строку 7 Excel)

Excel Values Main Loop
    : FOR    ${INDEX}    IN RANGE    3    6
    \    Set Suite Variable    ${INDEX}
    \    ${i}    Evaluate    ${i}+1 
    \    Log    INDEX value logged in (Excel Values Main Loop) is currently: ${INDEX}
    \    Put String To Cell    Listvalues    0    ${INDEX+1}    @{valueslist}[${i-1}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...