2016-08-26 1 views
0

Je viens de commencer à travailler sur l'automatisation des tests python, et j'essaie d'affirmer qu'un certain cookie avec une certaine valeur est en cours de définition lorsque l'on clique sur un bouton donné. Je l'automatisation des tests en utilisant écharde, et jusqu'à présent je ceci:Valeur d'affirmation de la clé dans cookie dict

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() 

La méthode "browser.cookies.all()" retourne un dict de { 'cookie1': 'valeur1', 'cookie2': 'value2', etc.}; Je suis en train d'affirmer que « cookie1 » revient avec la valeur « valeur1 », mais à ce jour rien que j'ai essayé a travaillé, comme ils viennent tous avec une sorte d'erreur « unhashable »:

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' 

maintenant , Je n'ai jamais travaillé avec python auparavant, donc c'est peut-être quelque chose de vraiment simple qui m'échappe, mais je ne peux pas le comprendre. Je peux les affirmer individuellement, mais ce que je vraiment besoin est, dans les termes les plus simples:

assert 'cookie1' with value 'value1' in cookies_list 

Est-il possible de le faire?

Répondre

1

Vous dites que browser.cookies.all() retourner un dict, par conséquent, vous devriez l'utiliser comme dict et non comme une liste.

Par exemple, vous pouvez faire:

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

Trouver un peu plus d'infos sur le dictionnaire here

Pour vérifier les valeurs des multiples: Créer un autre dict nous les valeurs attendues:

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

Modifier pour améliorer la réponse: Et puis itérer sur toutes les touches de la dict.

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

Génial, merci! Est-il possible de le faire comme une liste de clés et de valeurs? Comme dans "assert cookies_list.get ('cookie1', 'cookie2') == 'valeur1', 'valeur2'? – RagnarOdin

+0

@RagnarOdin J'ai édité ma réponse, j'espère que cela vous aidera –

+0

Double merci, le réponse améliorée a travaillé comme un charme! – RagnarOdin