Skip to content

Commit 1035ab9

Browse files
authored
Merge pull request #1109 from grahamhar/master
Expose the proxy bypass option
2 parents e65fc98 + 825f86c commit 1035ab9

File tree

4 files changed

+57
-0
lines changed

4 files changed

+57
-0
lines changed

seleniumbase/core/browser_launcher.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,7 @@ def _set_chrome_options(
253253
proxy_auth,
254254
proxy_user,
255255
proxy_pass,
256+
proxy_bypass_list,
256257
user_agent,
257258
recorder_ext,
258259
disable_csp,
@@ -441,6 +442,9 @@ def _set_chrome_options(
441442
chrome_options, proxy_string, proxy_user, proxy_pass
442443
)
443444
chrome_options.add_argument("--proxy-server=%s" % proxy_string)
445+
if proxy_bypass_list:
446+
chrome_options.add_argument(
447+
"--proxy-bypass-list=%s" % proxy_bypass_list)
444448
if headless:
445449
if not proxy_auth and not browser_name == constants.Browser.OPERA:
446450
# Headless Chrome doesn't support extensions, which are
@@ -491,6 +495,7 @@ def _set_firefox_options(
491495
headless,
492496
locale_code,
493497
proxy_string,
498+
proxy_bypass_list,
494499
user_agent,
495500
disable_csp,
496501
firefox_arg,
@@ -545,6 +550,8 @@ def _set_firefox_options(
545550
options.set_preference("network.proxy.http_port", int(proxy_port))
546551
options.set_preference("network.proxy.ssl", proxy_server)
547552
options.set_preference("network.proxy.ssl_port", int(proxy_port))
553+
if proxy_bypass_list:
554+
options.set_preference("no_proxies_on", proxy_bypass_list)
548555
if user_agent:
549556
options.set_preference("general.useragent.override", user_agent)
550557
options.set_preference(
@@ -697,6 +704,7 @@ def get_driver(
697704
servername="localhost",
698705
port=4444,
699706
proxy_string=None,
707+
proxy_bypass_list=None,
700708
user_agent=None,
701709
cap_file=None,
702710
cap_string=None,
@@ -771,6 +779,7 @@ def get_driver(
771779
proxy_auth,
772780
proxy_user,
773781
proxy_pass,
782+
proxy_bypass_list,
774783
user_agent,
775784
cap_file,
776785
cap_string,
@@ -810,6 +819,7 @@ def get_driver(
810819
proxy_auth,
811820
proxy_user,
812821
proxy_pass,
822+
proxy_bypass_list,
813823
user_agent,
814824
recorder_ext,
815825
disable_csp,
@@ -849,6 +859,7 @@ def get_remote_driver(
849859
proxy_auth,
850860
proxy_user,
851861
proxy_pass,
862+
proxy_bypass_list,
852863
user_agent,
853864
cap_file,
854865
cap_string,
@@ -940,6 +951,7 @@ def get_remote_driver(
940951
proxy_auth,
941952
proxy_user,
942953
proxy_pass,
954+
proxy_bypass_list,
943955
user_agent,
944956
recorder_ext,
945957
disable_csp,
@@ -1007,6 +1019,7 @@ def get_remote_driver(
10071019
headless,
10081020
locale_code,
10091021
proxy_string,
1022+
proxy_bypass_list,
10101023
user_agent,
10111024
disable_csp,
10121025
firefox_arg,
@@ -1245,6 +1258,7 @@ def get_local_driver(
12451258
proxy_auth,
12461259
proxy_user,
12471260
proxy_pass,
1261+
proxy_bypass_list,
12481262
user_agent,
12491263
recorder_ext,
12501264
disable_csp,
@@ -1283,6 +1297,7 @@ def get_local_driver(
12831297
headless,
12841298
locale_code,
12851299
proxy_string,
1300+
proxy_bypass_list,
12861301
user_agent,
12871302
disable_csp,
12881303
firefox_arg,
@@ -1539,6 +1554,9 @@ def get_local_driver(
15391554
edge_options, proxy_string, proxy_user, proxy_pass
15401555
)
15411556
edge_options.add_argument("--proxy-server=%s" % proxy_string)
1557+
if proxy_bypass_list:
1558+
edge_options.add_argument(
1559+
"--proxy-bypass-list=%s" % proxy_bypass_list)
15421560
edge_options.add_argument("--test-type")
15431561
edge_options.add_argument("--log-level=3")
15441562
edge_options.add_argument("--no-first-run")
@@ -1682,6 +1700,7 @@ def get_local_driver(
16821700
proxy_auth,
16831701
proxy_user,
16841702
proxy_pass,
1703+
proxy_bypass_list,
16851704
user_agent,
16861705
recorder_ext,
16871706
disable_csp,
@@ -1734,6 +1753,7 @@ def get_local_driver(
17341753
proxy_auth,
17351754
proxy_user,
17361755
proxy_pass,
1756+
proxy_bypass_list,
17371757
user_agent,
17381758
recorder_ext,
17391759
disable_csp,
@@ -1830,6 +1850,7 @@ def get_local_driver(
18301850
proxy_auth,
18311851
proxy_user,
18321852
proxy_pass,
1853+
proxy_bypass_list,
18331854
user_agent,
18341855
recorder_ext,
18351856
disable_csp,

seleniumbase/fixtures/base_case.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2674,6 +2674,7 @@ def get_new_driver(
26742674
servername=None,
26752675
port=None,
26762676
proxy=None,
2677+
proxy_bypass_list=None,
26772678
agent=None,
26782679
switch_to=True,
26792680
cap_file=None,
@@ -2715,6 +2716,8 @@ def get_new_driver(
27152716
servername - if using a Selenium Grid, set the host address here
27162717
port - if using a Selenium Grid, set the host port here
27172718
proxy - if using a proxy server, specify the "host:port" combo here
2719+
proxy_bypass_list - Semi-colon seperated string of domains to not
2720+
use a proxy for or * to bypass all
27182721
switch_to - the option to switch to the new driver (default = True)
27192722
cap_file - the file containing desired capabilities for the browser
27202723
cap_string - the string with desired capabilities for the browser
@@ -2789,6 +2792,8 @@ def get_new_driver(
27892792
proxy_string = proxy
27902793
if proxy_string is None:
27912794
proxy_string = self.proxy_string
2795+
if proxy_bypass_list is None:
2796+
proxy_bypass_list = self.proxy_bypass_list
27922797
user_agent = agent
27932798
if user_agent is None:
27942799
user_agent = self.user_agent
@@ -2863,6 +2868,7 @@ def get_new_driver(
28632868
servername=servername,
28642869
port=port,
28652870
proxy_string=proxy_string,
2871+
proxy_bypass_list=proxy_bypass_list,
28662872
user_agent=user_agent,
28672873
cap_file=cap_file,
28682874
cap_string=cap_string,
@@ -10711,6 +10717,7 @@ def setUp(self, masterqa_mode=False):
1071110717
self.servername = sb_config.servername
1071210718
self.port = sb_config.port
1071310719
self.proxy_string = sb_config.proxy_string
10720+
self.proxy_bypass_list = sb_config.proxy_bypass_list
1071410721
self.user_agent = sb_config.user_agent
1071510722
self.mobile_emulator = sb_config.mobile_emulator
1071610723
self.device_metrics = sb_config.device_metrics
@@ -10991,6 +10998,7 @@ def setUp(self, masterqa_mode=False):
1099110998
servername=self.servername,
1099210999
port=self.port,
1099311000
proxy=self.proxy_string,
11001+
proxy_bypass_list=self.proxy_bypass_list,
1099411002
agent=self.user_agent,
1099511003
switch_to=True,
1099611004
cap_file=self.cap_file,

seleniumbase/plugins/pytest_plugin.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ def pytest_addoption(parser):
3737
--cap-string=STRING (The web browser's desired capabilities to use.)
3838
--proxy=SERVER:PORT (Connect to a proxy server:port for tests.)
3939
--proxy=USERNAME:PASSWORD@SERVER:PORT (Use authenticated proxy server.)
40+
--proxy-bypass-list=STRING (Semi-colon seperated string of domains to not
41+
use a proxy for or * to bypass all)
4042
--agent=STRING (Modify the web browser's User-Agent string.)
4143
--mobile (Use the mobile device emulator while running tests.)
4244
--metrics=STRING (Set mobile metrics: "CSSWidth,CSSHeight,PixelRatio".)
@@ -384,6 +386,17 @@ def pytest_addoption(parser):
384386
A dict key from proxy_list.PROXY_LIST
385387
Default: None.""",
386388
)
389+
parser.addoption(
390+
"--proxy-bypass-list",
391+
action="store",
392+
dest="proxy_bypass_list",
393+
default=None,
394+
help="""Designates the domains or IP address to bypass the defined proxy.
395+
Format: example.test OR
396+
example.test,anothorexample.test OR
397+
*
398+
Default: ''.""",
399+
)
387400
parser.addoption(
388401
"--agent",
389402
"--user-agent",
@@ -1051,6 +1064,7 @@ def pytest_configure(config):
10511064
if str(sb_config.port) == "443":
10521065
sb_config.protocol = "https"
10531066
sb_config.proxy_string = config.getoption("proxy_string")
1067+
sb_config.proxy_bypass_list = config.getoption("proxy_bypass_list")
10541068
sb_config.cap_file = config.getoption("cap_file")
10551069
sb_config.cap_string = config.getoption("cap_string")
10561070
sb_config.settings_file = config.getoption("settings_file")

seleniumbase/plugins/selenium_plugin.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ class SeleniumBrowser(Plugin):
2121
--cap-string=STRING (The web browser's desired capabilities to use.)
2222
--proxy=SERVER:PORT (Connect to a proxy server:port for tests.)
2323
--proxy=USERNAME:PASSWORD@SERVER:PORT (Use authenticated proxy server.)
24+
--proxy-bypass-list=STRING (Semi-colon seperated string of domains to not
25+
use a proxy for or * to bypass all)
2426
--agent=STRING (Modify the web browser's User-Agent string.)
2527
--mobile (Use the mobile device emulator while running tests.)
2628
--metrics=STRING (Set mobile metrics: "CSSWidth,CSSHeight,PixelRatio".)
@@ -157,6 +159,17 @@ def options(self, parser, env):
157159
A dict key from proxy_list.PROXY_LIST
158160
Default: None.""",
159161
)
162+
parser.add_option(
163+
"--proxy-bypass-list",
164+
action="store",
165+
dest="proxy_bypass_list",
166+
default=None,
167+
help="""Designates the domains or IP address to bypass the defined proxy.
168+
Format: example.test OR
169+
example.test,anothorexample.test OR
170+
*
171+
Default: ''.""",
172+
)
160173
parser.add_option(
161174
"--agent",
162175
"--user-agent",
@@ -625,6 +638,7 @@ def beforeTest(self, test):
625638
test.test.firefox_arg = self.options.firefox_arg
626639
test.test.firefox_pref = self.options.firefox_pref
627640
test.test.proxy_string = self.options.proxy_string
641+
test.test.proxy_bypass_list = self.options.proxy_bypass_list
628642
test.test.user_agent = self.options.user_agent
629643
test.test.mobile_emulator = self.options.mobile_emulator
630644
test.test.device_metrics = self.options.device_metrics

0 commit comments

Comments
 (0)