Robot Framework - изменение переменных в зависимости от ввода - PullRequest
0 голосов
/ 10 мая 2018

У меня есть следующий селектор css

${Table_Row}      css=.tr > td:nth-child(2)

Этот селектор получит мне первый экземпляр в таблице.Проблема в том, что таблица может содержать сотни экземпляров, а я не хочу иметь сотни переменных.Как я могу сделать переменную более динамичной, чтобы я мог передать другую переменную для определения числа nth-child, не делая его ключевым словом?

Вот пример того, что я имею в виду на python:

table_row = ".tr > td:nth-child(%s)"

Тогда, если я вызову эту переменную

table_row % 5

Результат будет

.tr > td:nth-child(5)

1 Ответ

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

Если это то, что часто повторяется, и вы хотите централизовать логику и вообще не иметь дело с переменными, тогда Стратегия пользовательского локатора ,

Пример, вдохновленный вашим вопросом:

*** Test Cases ***
Test Case
    Add Location Strategy   table   Custom Locator Strategy
    Page Should Contain Element table=3

*** Keywords ***
Custom Locator Strategy 
    [Arguments]    ${browser}    ${criteria}    ${tag}    ${constraints}
    ${element}=    Get Webelement   css=.tr > td:nth-child(${criteria}) 
    [Return]    ${element}

Это будет работать для всех ключевых слов, которые принимают локатор в качестве входного аргумента. Стратегия пользовательского локатора должна возвращать только веб-элемент.

Альтернатива, которая, на мой взгляд, удовлетворяет встроенным критериям, но, на мой взгляд, не более читабельна (оставьте это читателю), заключается в использовании строковых функций объекта. Они описаны в разделе Advanced Variable Syntax Руководства по структуре роботов и вокруг него:

*** Variables ***
${locator_template}    css=.tr > td:nth-child(%) 

*** Test Cases ***
TC
    Log    Locator Template: "${locator_template}"
    ${locator}    Set Variable    ${locator_template.replace("%", "9")}

    Log    Locator Variable: "${locator}"
    Log    Inline Variable: "${locator_template.replace("%", "9")}"
    Log    Locator Template: "${locator_template}"

В этом примере показано, как использовать встроенные функции объекта. Поскольку у объекта Python String есть метод replace, он обеспечит стабильный способ замены той же переменной и использования выходных данных replace для дальнейшего назначения в ключевых словах.

Это даст следующий результат:

Starting test: Robot.String Replace.TC
20180513 12:25:21.057 : INFO : Locator Template: "css=.tr > td:nth-child(%)
20180513 12:25:21.058 : INFO : ${locator} = css=.tr > td:nth-child(9)
20180513 12:25:21.059 : INFO : Locator Variable: "css=.tr > td:nth-child(9)"
20180513 12:25:21.060 : INFO : Inline Variable: "css=.tr > td:nth-child(9)"
20180513 12:25:21.061 : INFO : Locator Template: "css=.tr > td:nth-child(%)"
Ending test: Robot.String Replace.TC

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

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