The corporate proxy
used NTLM authentication,
but since I was on a different domain, I couldn’t get Firefox to send this
information automatically so an authentication dialog would always appear that
looked similar to this (IE worked fine):
Normally with browser
authentication it is fairly straightforward to embed the
username and password into the URL and Firefox will pass this
to the web application without any problems (it’ll even ignore the confirmation
normally displayed to the user), but in this case it didn’t work as it was the
proxy that was requesting the information, not the application.
1
2
3
|
require 'watir-webdriver'
b = Watir::Browser.new
:firefox
b.goto 'http://admin:password@192.168.0.1'
|
I manually could get
Firefox to store the credentials, but every time the WebDriver tests would run,
this darn ‘Authentication Required’ dialog would appear (without
credentials if using the standard new WebDriver profile for each test run). I
tried setting all sorts of Firefox about:config settings to do with NTLM but
nothing would work. After lots of trial and error, and finding nothing useful
on the Internet about this issue, a colleague pointed out a Firefox add-on
called AutoAuth that
automatically submits these dialogs using stored Firefox credentials. Voila!
Example using
Watir-WebDriver (the quick way)
The easiest way is to
the install the AutoAuth add-on on your default Firefox profile (the one that
Firefox uses when launched manually), and store the credentials needed in the
default Firefox password manager. All you then need to do is tell Watir-WebDriver
to use the default profile:
1
2
3
|
require 'watir-webdriver'
b = Watir::Browser.new
:firefox, :profile
=> 'default'
|
The issue with the
above code is that it’s not repeatable across machines, as the machine’s
default profile must have AutoAuth installed, and the username and password in
the password manager.
Example using
Watir-WebDriver (the most repeatable way)
To make this more
repeatable, first you need to create a Firefox profile by following the
instructions here (we’ll
call it WatirWebDriver).
Manually launch this
profile and visit the site you need to authenticate to, enter the username and
password and make sure you save the credentials in Firefox when prompted.
The script is then
pretty simple: create a profile as a copy of the one you made, add the AutoAuth
extension (download it and place the xpi file in your project directory), and
visit the site:
1
2
3
4
|
profile = Selenium::WebDriver::Firefox::Profile.from_name
'WatirWebDriver'
profile.add_extension 'autoauth-2.1-fx+fn.xpi'
b = Watir::Browser.new
:firefox, :profile
=> profile
b.goto 'http://194.23.34.1'
|
This script should
visit the site and AutoAuth should kick in and automatically submit that pesky
‘Authentication Required’ dialog: take that!
For IE:
For IE:
By the way, this won't work in Internet Explorer because Microsoft has disabled username/password in URLs.
To fix that you can set an "iexplore.exe" DWORD to 0 in HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE.


No comments:
Post a Comment