How to Force Selenium Webdriver to Use and Keep Cookies? - selenium

I'm testing a website which uses cookies for security. Every time a user logs in with a different device or browser they must go through an intensive (email and phone keys) identity verification process. My backup/restore process uses a Firefox addon and works for manual testing.
However when I run Selenium I get triggered to go through the ID process every time. So either Selenium is not using the cookies, or is being given a different browser ID for some reason.
I set a breakpoint to check my cookies are loaded in the Selenium Firefox browser window, but my addon is not available in Selenium Firefox instances.
Selenium documentation is very slim on cookie use:
http://www.seleniumhq.org/docs/03_webdriver.jsp
So any info much appreciated.

Related

Robot Framework: Resuming a session after closing the web browser

I'm writing a series of tests with Robot Framework, that involve the supposed user closing the web browser (Chrome) during a session of the tested web-service and then re-opening the browser, automatically resuming the session.
My issue is, that with the Close Browser - Open Browser -combination in Robot Framework a fresh browser is always opened every time, and thus the user is logged out of the service and session is ended.
I tried getting and adding the cookies with the built-in Selenium keywords, but I was unable to resume the session that way. Doing the task manually works as intended.
Apparently it is not possible to attach Selenium to an existing browser session created launched for example by a custom Python keyword.
Is this something that is possible in Robot Framework and what kind of solution should I look for? Thank you.

Can we run selenium in our current account logged- in browser?

Can we run selenium in our current account logged in browser ?
Basically if i try logging into google using selenium , its says browser insecure.
i am trying to make a amazon cart auto checkout as a school project
so if i try in my existing browser , my amazon id is already registered and i dont have to sign in again . but if i use amazon login in selenium its asking for signin and 2fa is being sent to my mail id, how to i skip this step and directly go to the logged in page??
please help
You can't use your non-chrome driver browser (aka regular chrome browser). Selenium only works with chrome-drivers. One way remain signed in is to specify a profile in options so that every-time the driver initiates, it loads your cookies and history.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("--user-data-dir=Amazon")
driver = webdriver.Chrome(options=chrome_options)
From the code above, chrome_options.add_argument("--user-data-dir=Amazon") will create a profile 'Amazon' if not already there, and save cookies and history there.
The next time you run the driver it will load it from 'Amazon'.
Here is a blog that explains how to install a chrome browser remotely on a specific folder by installing a dedicated browser onto it to use selenium with.
This manages all data including cache, history, accounts, etc
for further info refer the link here
Here is a blog that explains how to install a chrome browser remotely on a specific folder by installing a dedicated browser onto it to use selenium with.
This manages all data including cache, history, accounts, etc
for further info refer the link here
https://learn-automation.com/how-to-execute-selenium-scripts-on-already-opened-browser/

Selenium Golang binding without server

There are many selenium webdriver binding package of Golang.
However, I don't want to control browser throught server.
How can I control browser with Golang and selenium without selenium server?
You can try github.com/fedesog/webdriver which says in its documentation:
This is a pure go library and doesn't require a running Selenium driver.
I would characterize the Selenium webdriver as a client rather than a server. Caveat: I have used the Selenium webdriver (Chrome version) from .Net and I am assuming it is similar for Go.
The way Selenium works is that you will launch an instance of it from within code, and it creates a live version of the selected browser (i.e. Chrome) and your program retains control over it. Then you write code to tell the browser to navigate to a page, inspect the response, and interact with the browser by filling out form data, clicking on buttons, etc. You can see what is happening on the browser as the code runs, so it is easy to troubleshoot when the interaction doesn't go as planned.
I have used Selenium to upload tens of thousands of records to a website that has no API and only a graphical user interface. Give it a chance.

Selenium: Do different browser instances have separate cookie jars?

I'm trying to test a scenario where two separate users are logged in. As the question states, is this possible with Selenium? I don't if it's browser dependent, but I'm using Chrome.
Selenium (web driver) allows to open several browser windows (e.g. 3 Firefox windows or 1 IE + 1 Firefox +1 Chrome).
In you code you have API to select the desired window (depending how on how you opened it).
Regarding the session handling: that depends on the browser type. Firefox will share the session across multiple windows because it's using a single process. AFAIK IE and Chrome if opened as new processes will not share it, but this of course depends also on how the server is setting the cookie policy for the session.
Access to cookie values in the browser however is domain dependent, so a persistent cookies or local storage can share information even across sessions, so it really depends on how the web application is implemented (or what framework is using - that mostly takes care of such stuff).
If you want complete separation, then take a look at Selenium Grid;https://code.google.com/p/selenium/wiki/Grid2
This would allow you to have the browsers open on different computers while running the test on one machine

How do I detect that SSL is broken on a page, using Selenium

We have pages where we occasionally see compromised SSL certificate because of third party scripts that load non HTTPS resources (Initially they're fine but they occasionally change). We would like to test those pages for broken SSL every day.
We have tried one approach, attempting to catch a pop-up message that would indicate that we have insecure content on the page. However, we have been unsuccessful in simulating the pop-up message through selenium. It appears that selenium has automatically disabled any popups. While we have identified a Selenium method to disable the suppression of the pop-ups(disable-popup-handler) but we have not been able to successfully see the popup even using this method.
Has anyone found a way to detect broken SSL pages using Selenium?
You need to load a browser profile (with WebDriver) that doesn't have the setting for popup blocker enabled (using the Profile class and giving it the right properties). Then, you will get the Windows popup message concerning the SSL cert. If , for some reason, you cannot control the popup using WebDriver (because its limited to Action control only within the browser content window) then you can use Sikuli API to handle the dialog and export the cert to the "Downloads" dir and then copy the file to expected location for inspection. Unfortunately, if you use Sikuli, that will make your automation script sequential and not work via a RemoteWebDriver grid server and so you wont be able to run parallel tests. Hopfully, WebDriver gives you access to the dialog and so you will be able to run with RemoteWebDriver because that is the best way to go when running scripts, even if you run a browser locally.