【问题标题】:Assert value for key in cookie dict断言 cookie 字典中键的值
【发布时间】:2016-08-26 11:47:15
【问题描述】:

我刚刚开始使用 python 测试自动化,我试图断言单击某个按钮时正在设置具有某个值的某个 cookie。我正在使用 splinter 自动化测试,到目前为止我有这个:

cookie_bar = browser.find_link_by_text('Yes')
manage_cookies = browser.find_link_by_text('Manage cookies')
    if not manage_cookies:
        if cookie_bar:
            browser.find_link_by_text('Yes').first.click()
        else:
            browser.find_link_by_text('Hide this message').first.click()
    if manage_cookies:
            browser.find_link_by_text('Manage cookies').first.click()
            browser.driver.switch_to_window(browser.windows[-1].name)
            browser.find_by_text('Accept Cookies').first.click()
            browser.driver.switch_to_window(browser.windows[-1].name)
            cookies_list = browser.cookies.all()

“browser.cookies.all()”方法返回 {'cookie1': 'value1', 'cookie2': 'value2', etc.};我试图断言“cookie1”返回值“value1”,但到目前为止,我尝试过的任何方法都没有奏效,因为它们都带有某种“不可散列”错误:

assert ['cookie1' == 'value1'] in cookies_list # TypeError: unhashable type: 'list'
assert [{'cookie1': 'value1'}] in cookies_list # TypeError: unhashable type: 'list'
assert {'cookie1': 'value1'} in cookies_list # TypeError: unhashable type: 'dict'
assert {'cookie1', 'value1'} in cookies_list #TypeError: unhashable type: 'set'

现在,我以前从未使用过 python,所以也许这是一些非常简单的东西让我无法理解,但我终其一生都无法弄清楚。我可以单独断言它们,但我真正需要的是,用最简单的话来说:

assert 'cookie1' with value 'value1' in cookies_list

有没有办法做到这一点?

【问题讨论】:

    标签: python cookies automated-tests splinter


    【解决方案1】:

    您是说browser.cookies.all() 返回一个字典,因此,您应该将其用作字典而不是列表。

    例如你可以这样做:

    assert cookies_list.get('cookie1', None) == 'value1'
    

    查找有关字典here的更多信息

    检查多个值: 创建另一个我们期望值的字典:

    expected = {'cookie1': 'value1', 'cookie2': 'value2'}
    

    编辑以改进答案: 然后迭代字典的所有键。

    for key in expected.keys():
        assert cookies_list.get(key, None) == expected[key]
    

    【讨论】:

    • 太棒了,谢谢!是否可以将其作为键和值列表来执行?如 "assert cookies_list.get('cookie1', 'cookie2') == 'value1', 'value2'?
    • @RagnarOdin 我已经编辑了我的答案,希望对您有所帮助。
    • 再次感谢,改进后的答案就像一个魅力!
    猜你喜欢
    • 2019-12-09
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 2015-02-10
    • 1970-01-01
    • 2013-01-07
    相关资源
    最近更新 更多