I'm using Selenium WebDriver to launch a specific Firefox Profile. Normally, Selenium creates a temporary installation of FF that mimics an existing Firefox Profile which is then deleted after calling webdriver.close().
However, I need to be able to launch Firefox WebDriver via Selenium and preserve certain login cookies for future session so that I don't get asked to enter a password and/or verification code every time I login to an account. I have seen a few ways to tackle this problem but each has its own problems:
1) Identify the temporary files created by Selenium and copy cookies.sqlite to the original FF Profile installation folder. The problem I see with this approach is that I'm launching many instances of Selenium at the same time so how would I identify which temporary folder corresponds to a specific WebDriver session? Also, would it be possible to append cookies to original installation file instead of overwriting the original file?
2) One user suggested calling:
Set<Cookie> allCookies = driver.manage().getCookies();
before calling driver.close() and then add cookies to next WebDriver session by calling:
for(Cookie cookie : allCookies)
{
driver.manage().addCookie(cookie);
}
The problem I see with this approach is that I need cookies to be preserved for the long term (i.e, forever) and I cannot store cookies of all sessions in memory. Even if I could, cookie data would be lost when the program exists or the host machine is turned off. Additionally, getCookies() returns only cookies for the current domain, while addCookie() allows to add only a cookie with domain same as current URL's domain. So when getting or setting cookies it is important to go to the right URL first as pointed out by one commenter. I want to load cookies from multiple domains immediately when the new FF session is launched.
3) Another option might be to prevent Firefox from creating temporary files in new location in the first place (i.e, redirect to original FF installation directory) and prevent FF from deleting the temporary files upon exit. Is something like this viable?
I've seen some other approaches but they either only address this question as it relates to Chrome (not Firefox) or in Python or they suffer from one of the flaws mentioned above.
What approach can be used to solve this problem in Java + Firefox?
Thanks!