[英]Robot Framework - Change variables depending on input
我有以下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)
如果這是經常重復的事情,並且您想集中化邏輯而根本不必處理變量,則可以使用“ 自定義定位器策略” ,
受您的問題啟發的示例:
*** 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}
然后,它將對所有將定位符作為輸入參數的關鍵字都起作用。 自定義定位器策略僅需要返回一個Web元素。
在我看來,滿足內聯條件但又不可讀(將其留給讀者)的另一種選擇是使用字符串對象函數。 在《機器人框架指南》的“ 高級變量語法”部分及其周圍進行了描述:
*** 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方法,它將提供一種替換相同變量並將其替換輸出用於關鍵字中進一步分配的穩定方法。
它將產生以下結果:
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
如您所知,replace函數返回結果,並且不更新原始字符串。 這使其可用作可重用模板。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.