Я пытаюсь автоматизировать некоторые тесты с использованием фреймворка робота. В некоторых тестовых случаях мне нужно вводить куки в вебдрайвер (пока только 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? или ...?