InvalidCookieDomainException при добавлении файла cookie с роботизированной структурой в Firefox - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь автоматизировать некоторые тесты с использованием фреймворка робота. В некоторых тестовых случаях мне нужно вводить куки в вебдрайвер (пока только firefox). Мой код инъекции внутри контрольного примера выглядит так:

Access MyDomain
   [Documentation]  Open browser in sub.mydomain.com and inject cookies.
   [Arguments]  ${pdata}
   ${json_str} =  Get File  ${pdata}
   ${json_data} =  evaluate  json.loads('''${json_str}''')  json
   Open Browser  https://sub.mydomain.com  browser=ff
   Wait Until Page Contains  Welcome to mydomain
   FOR  ${cookie}  IN  @{json_data["cookies"]}
        add cookie  ${cookie['name']}  ${cookie['value']}  path = ${cookie['path']}  domain = ${cookie['domain']}
   END

Некоторые из файлов cookie имеют домен " sub.mydomain.com ", а некоторые имеют " .mydomain.com ". Для вторых, RobotFramework приводит к InvalidCookieDomainException .

Тем не менее, следующий код Python отлично работает прямо на том же Firefox Selenium WebDriver:

import json, time

from selenium.webdriver import Firefox, FirefoxProfile

def inject_cookies_to_firefox(domain, dataCookies = None):
    cookies_objects = []

    if dataCookies:
        mcookies= json.loads(dataCookies)
        if "cookies" in mcookies:
            cookies = credentials["cookies"]
            for cookie in cookies:
                cookies_objects.append({
                         'path': cookie.get("path"),
                         'domain': cookie.get("domain"),
                         'name': cookie.get("name"),
                         "value": cookie.get("value")}
                )
        else:
            return -1
    else:
        return -1

    ff_profile = FirefoxProfile()
    driver = Firefox(ff_profile)
    driver.get(domain)
    for item in cookies_objects:
        try:
            driver.add_cookie(item)
        except:
            print(f"Error injecting cookie: {item}")
            return -1
    print("Cookies injected.")
    time.sleep(10)
    driver.quit()
    return ff_profile.path

С тем же URL-адресом, открытым в браузере (https://sub.mydomain.com), этот код вводит файлы cookie с доменом = "sub.mydomain.com" и файлы cookie с доменом = ".mydomain.com" без каких-либо исключений.

В чем разница? Разве RF не использует точно такой же код Selenium Webdriver? или ...?

1 Ответ

0 голосов
/ 20 января 2019

Простой ответ: «Бережно относитесь к пробелам в РФ». Вместо

add cookie  ${cookie['name']}  ${cookie['value']}  path = ${cookie['path']}  domain = ${cookie['domain']}

использование:

add cookie  ${cookie['name']}  ${cookie['value']}  path=${cookie['path']}  domain=${cookie['domain']}

Глупая ошибка "новичка" с моей стороны.

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