@@ -83,7 +83,8 @@ def _add_chrome_proxy_extension(
8383
8484
8585def _set_chrome_options (
86- downloads_path , proxy_string , proxy_auth , proxy_user , proxy_pass ):
86+ downloads_path , proxy_string , proxy_auth ,
87+ proxy_user , proxy_pass , user_agent ):
8788 chrome_options = webdriver .ChromeOptions ()
8889 prefs = {
8990 "download.default_directory" : downloads_path ,
@@ -100,6 +101,8 @@ def _set_chrome_options(
100101 chrome_options .add_argument ("--allow-file-access-from-files" )
101102 chrome_options .add_argument ("--allow-insecure-localhost" )
102103 chrome_options .add_argument ("--allow-running-insecure-content" )
104+ if user_agent :
105+ chrome_options .add_argument ("--user-agent=%s" % user_agent )
103106 chrome_options .add_argument ("--disable-infobars" )
104107 chrome_options .add_argument ("--disable-save-password-bubble" )
105108 chrome_options .add_argument ("--disable-single-click-autofill" )
@@ -113,7 +116,7 @@ def _set_chrome_options(
113116 return chrome_options
114117
115118
116- def _create_firefox_profile (downloads_path , proxy_string ):
119+ def _create_firefox_profile (downloads_path , proxy_string , user_agent ):
117120 profile = webdriver .FirefoxProfile ()
118121 profile .accept_untrusted_certs = True
119122 profile .set_preference ("reader.parse-on-load.enabled" , False )
@@ -128,6 +131,8 @@ def _create_firefox_profile(downloads_path, proxy_string):
128131 profile .set_preference ("network.proxy.http_port" , int (proxy_port ))
129132 profile .set_preference ("network.proxy.ssl" , proxy_server )
130133 profile .set_preference ("network.proxy.ssl_port" , int (proxy_port ))
134+ if user_agent :
135+ profile .set_preference ("general.useragent.override" , user_agent )
131136 profile .set_preference (
132137 "security.mixed_content.block_active_content" , False )
133138 profile .set_preference ("security.csp.enable" , False )
@@ -195,7 +200,7 @@ def validate_proxy_string(proxy_string):
195200
196201def get_driver (browser_name , headless = False , use_grid = False ,
197202 servername = 'localhost' , port = 4444 , proxy_string = None ,
198- cap_file = None ):
203+ user_agent = None , cap_file = None ):
199204 proxy_auth = False
200205 proxy_user = None
201206 proxy_pass = None
@@ -224,27 +229,26 @@ def get_driver(browser_name, headless=False, use_grid=False,
224229 if use_grid :
225230 return get_remote_driver (
226231 browser_name , headless , servername , port , proxy_string , proxy_auth ,
227- proxy_user , proxy_pass , cap_file )
232+ proxy_user , proxy_pass , user_agent , cap_file )
228233 else :
229234 return get_local_driver (
230235 browser_name , headless , proxy_string , proxy_auth ,
231- proxy_user , proxy_pass )
236+ proxy_user , proxy_pass , user_agent )
232237
233238
234239def get_remote_driver (
235240 browser_name , headless , servername , port , proxy_string , proxy_auth ,
236- proxy_user , proxy_pass , cap_file ):
241+ proxy_user , proxy_pass , user_agent , cap_file ):
237242 downloads_path = download_helper .get_downloads_folder ()
238243 download_helper .reset_downloads_folder ()
239244 address = "http://%s:%s/wd/hub" % (servername , port )
240245 desired_caps = {}
241246 if cap_file :
242247 desired_caps = capabilities_parser .get_desired_capabilities (cap_file )
243-
244248 if browser_name == constants .Browser .GOOGLE_CHROME :
245249 chrome_options = _set_chrome_options (
246250 downloads_path , proxy_string , proxy_auth ,
247- proxy_user , proxy_pass )
251+ proxy_user , proxy_pass , user_agent )
248252 if headless :
249253 if not proxy_auth :
250254 # Headless Chrome doesn't support extensions, which are
@@ -264,7 +268,8 @@ def get_remote_driver(
264268 elif browser_name == constants .Browser .FIREFOX :
265269 try :
266270 # Use Geckodriver for Firefox if it's on the PATH
267- profile = _create_firefox_profile (downloads_path , proxy_string )
271+ profile = _create_firefox_profile (
272+ downloads_path , proxy_string , user_agent )
268273 firefox_capabilities = DesiredCapabilities .FIREFOX .copy ()
269274 firefox_capabilities ['marionette' ] = True
270275 if headless :
@@ -280,7 +285,8 @@ def get_remote_driver(
280285 browser_profile = profile )
281286 except WebDriverException :
282287 # Don't use Geckodriver: Only works for old versions of Firefox
283- profile = _create_firefox_profile (downloads_path , proxy_string )
288+ profile = _create_firefox_profile (
289+ downloads_path , proxy_string , user_agent )
284290 firefox_capabilities = DesiredCapabilities .FIREFOX .copy ()
285291 firefox_capabilities ['marionette' ] = False
286292 if headless :
@@ -360,7 +366,7 @@ def get_remote_driver(
360366
361367def get_local_driver (
362368 browser_name , headless , proxy_string , proxy_auth ,
363- proxy_user , proxy_pass ):
369+ proxy_user , proxy_pass , user_agent ):
364370 '''
365371 Spins up a new web browser and returns the driver.
366372 Can also be used to spin up additional browsers for the same test.
@@ -372,7 +378,8 @@ def get_local_driver(
372378 try :
373379 try :
374380 # Use Geckodriver for Firefox if it's on the PATH
375- profile = _create_firefox_profile (downloads_path , proxy_string )
381+ profile = _create_firefox_profile (
382+ downloads_path , proxy_string , user_agent )
376383 firefox_capabilities = DesiredCapabilities .FIREFOX .copy ()
377384 firefox_capabilities ['marionette' ] = True
378385 options = webdriver .FirefoxOptions ()
@@ -392,7 +399,8 @@ def get_local_driver(
392399 options = options )
393400 except WebDriverException :
394401 # Don't use Geckodriver: Only works for old versions of Firefox
395- profile = _create_firefox_profile (downloads_path , proxy_string )
402+ profile = _create_firefox_profile (
403+ downloads_path , proxy_string , user_agent )
396404 firefox_capabilities = DesiredCapabilities .FIREFOX .copy ()
397405 firefox_capabilities ['marionette' ] = False
398406 firefox_driver = webdriver .Firefox (
@@ -451,7 +459,7 @@ def get_local_driver(
451459 try :
452460 chrome_options = _set_chrome_options (
453461 downloads_path , proxy_string , proxy_auth ,
454- proxy_user , proxy_pass )
462+ proxy_user , proxy_pass , user_agent )
455463 if headless :
456464 # Headless Chrome doesn't support extensions, which are
457465 # required when using a proxy server that has authentication.
0 commit comments