机器人框架 selenium 如何从字典中检索键

robot framework selenium How to retrieve a key from a diccionary

最近我尝试在 python 中使用 selenium-robot 框架在两种不同的浏览器中进行自动化测试,但是当我尝试记录浏览器的别名时出现错误。错误显示:“字典‘@{alias}’没有键‘1’”。

代码是这样的:

*** Settings ***
Library  SeleniumLibrary

*** Variables ***
${url}  http://google.com
${browser}  chrome

*** Test Cases ***
TC to demostrate Browser Operation Keywords in Robot Framework
    [Documentation]  TC to demostrate Browser Operation Keywords in Robot Framework

    Open Browser  http://google.com  Chrome  alias=ChromeRCV

    Maximize Browser Window

    Open Browser  about:blank  ff  alias=RCVFF

    &{alias}  Get Browser Aliases

    Log  @{alias}[1]

    @{browser_ID}  Get Browser Ids

    Log  @{browser_ID}[1]

    Switch Browser  1

    Input Text  //*[@id="tsf"]/div[2]/div[1]/div[1]/div/div[2]/input  RCVAcademy

    Sleep  4s

    Switch Browser  @{alias}[1]

    Go To  http://salesforce.com

    Close All Browsers

这是由于 Robot 解释变量的方式。由于您已经编写了 @{alias}[1] 机器人假定列表 alias 的索引 1 上的值也是一个列表。为避免将来出现此问题,请在分配 $@& 之前,首先考虑要从变量中 获取 什么。您可以在 Robot Framework User Guide.

中看到更好的解释

考虑下面的例子

&{DICT}=    {"key1": "value1", "key2": "value2"}

# Get a list of keys
@{KEYS}=    @{DICT.keys}
# ==> @{KEYS}= ["key1", "key2]

# Get a value from dictionary
${VALUE}=    ${DICT}[key1]
# ==> ${VALUE}= value1

# Get a value from list
${VALUE}=    ${LIST}[0]
# ==> ${VALUE}= key1

如您所见,只有在 return 列表值时,我们才使用 @ 符号。这是因为无论何时使用 @ 符号,Robot 都会将给定值解释为多个值的列表并尝试分别传递每个值 - 这也是为什么通常将列表与 $ 作为参数传递给让机器人将它们作为单个变量而不是多个单独的值传递。

此外,您正在尝试 return 来自 字典 的带有列表索引的值。这不会那样工作 - 您要么必须访问基于键的值,要么然后作为键列表 值。

既然你只需要用别名访问浏览器的密钥,那不妨干脆用下面的

Log    ${aliases.keys()}[1]

# or to log everything in the dictionary

Log    ${aliases}

看来您误解了 the return value of the Get Browser Aliases - 它 returns 一个字典,其中键是您为实例提供的别名,值是索引。

因此,当您键入 [1] 时,您的目标是别名 1(整数),但这不是您设置的别名之一 - 因此它不是该字典中的键,因此 -你得到的错误。

对此进行更改 - “ChromeRCV”是您实际拥有的别名,它应该可以工作:

Log  @{alias}['ChromeRCV']