Skip to content

Commit 1e94997

Browse files
committed
Add option for setting "--host-resolver-rules=RULES"
1 parent f7568e0 commit 1e94997

File tree

8 files changed

+100
-0
lines changed

8 files changed

+100
-0
lines changed

examples/raw_parameter_script.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@
8484
sb._disable_beforeunload = False
8585
sb.save_screenshot_after_test = False
8686
sb.no_screenshot_after_test = False
87+
sb.host_resolver_rules = None
8788
sb.page_load_strategy = None
8889
sb.timeout_multiplier = None
8990
sb.pytest_html_report = None

seleniumbase/behave/behave_sb.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,7 @@ def get_configured_sb(context):
230230
sb.proxy_bypass_list = None
231231
sb.proxy_pac_url = None
232232
sb.multi_proxy = False
233+
sb.host_resolver_rules = None
233234
sb.enable_3d_apis = False
234235
sb.swiftshader = False
235236
sb.ad_block_on = False
@@ -772,6 +773,13 @@ def get_configured_sb(context):
772773
if low_key in ["multi-proxy", "multi_proxy"]:
773774
sb.multi_proxy = True
774775
continue
776+
# Handle: -D host-resolver-rules=RULES / host_resolver_rules=RULES
777+
if low_key in ["host-resolver-rules", "host_resolver_rules"]:
778+
host_resolver_rules = userdata[key]
779+
if host_resolver_rules == "true":
780+
host_resolver_rules = sb.host_resolver_rules
781+
sb.host_resolver_rules = host_resolver_rules
782+
continue
775783
# Handle: -D enable-3d-apis / enable_3d_apis
776784
if low_key in ["enable-3d-apis", "enable_3d_apis"]:
777785
sb.enable_3d_apis = True

seleniumbase/core/browser_launcher.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -756,6 +756,7 @@ def _set_chrome_options(
756756
enable_3d_apis,
757757
swiftshader,
758758
ad_block_on,
759+
host_resolver_rules,
759760
block_images,
760761
do_not_track,
761762
chromium_arg,
@@ -837,6 +838,10 @@ def _set_chrome_options(
837838
chrome_options.set_capability(
838839
"goog:loggingPrefs", {"performance": "ALL", "browser": "ALL"}
839840
)
841+
if host_resolver_rules:
842+
chrome_options.add_argument(
843+
"--host-resolver-rules=%s" % host_resolver_rules
844+
)
840845
if mobile_emulator and not is_using_uc(undetectable, browser_name):
841846
emulator_settings = {}
842847
device_metrics = {}
@@ -1320,6 +1325,7 @@ def get_driver(
13201325
enable_3d_apis=False,
13211326
swiftshader=False,
13221327
ad_block_on=False,
1328+
host_resolver_rules=None,
13231329
block_images=False,
13241330
do_not_track=False,
13251331
chromium_arg=None,
@@ -1531,6 +1537,7 @@ def get_driver(
15311537
enable_3d_apis,
15321538
swiftshader,
15331539
ad_block_on,
1540+
host_resolver_rules,
15341541
block_images,
15351542
do_not_track,
15361543
chromium_arg,
@@ -1585,6 +1592,7 @@ def get_driver(
15851592
enable_3d_apis,
15861593
swiftshader,
15871594
ad_block_on,
1595+
host_resolver_rules,
15881596
block_images,
15891597
do_not_track,
15901598
chromium_arg,
@@ -1643,6 +1651,7 @@ def get_remote_driver(
16431651
enable_3d_apis,
16441652
swiftshader,
16451653
ad_block_on,
1654+
host_resolver_rules,
16461655
block_images,
16471656
do_not_track,
16481657
chromium_arg,
@@ -1764,6 +1773,7 @@ def get_remote_driver(
17641773
enable_3d_apis,
17651774
swiftshader,
17661775
ad_block_on,
1776+
host_resolver_rules,
17671777
block_images,
17681778
do_not_track,
17691779
chromium_arg,
@@ -1928,6 +1938,7 @@ def get_remote_driver(
19281938
enable_3d_apis,
19291939
swiftshader,
19301940
ad_block_on,
1941+
host_resolver_rules,
19311942
block_images,
19321943
do_not_track,
19331944
chromium_arg,
@@ -2042,6 +2053,7 @@ def get_local_driver(
20422053
enable_3d_apis,
20432054
swiftshader,
20442055
ad_block_on,
2056+
host_resolver_rules,
20452057
block_images,
20462058
do_not_track,
20472059
chromium_arg,
@@ -2453,6 +2465,10 @@ def get_local_driver(
24532465
edge_options.set_capability(
24542466
"ms:loggingPrefs", {"performance": "ALL", "browser": "ALL"}
24552467
)
2468+
if host_resolver_rules:
2469+
edge_options.add_argument(
2470+
"--host-resolver-rules=%s" % host_resolver_rules
2471+
)
24562472
if not enable_sync:
24572473
edge_options.add_argument("--disable-sync")
24582474
if (
@@ -2795,6 +2811,7 @@ def get_local_driver(
27952811
enable_3d_apis,
27962812
swiftshader,
27972813
ad_block_on,
2814+
host_resolver_rules,
27982815
block_images,
27992816
do_not_track,
28002817
chromium_arg,
@@ -3295,6 +3312,7 @@ def get_local_driver(
32953312
enable_3d_apis,
32963313
swiftshader,
32973314
None, # ad_block_on
3315+
None, # host_resolver_rules
32983316
block_images,
32993317
do_not_track,
33003318
None, # chromium_arg
@@ -3511,6 +3529,7 @@ def get_local_driver(
35113529
enable_3d_apis,
35123530
swiftshader,
35133531
None, # ad_block_on
3532+
None, # host_resolver_rules
35143533
block_images,
35153534
do_not_track,
35163535
None, # chromium_arg

seleniumbase/fixtures/base_case.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3765,6 +3765,7 @@ def get_new_driver(
37653765
enable_3d_apis=None,
37663766
swiftshader=None,
37673767
ad_block_on=None,
3768+
host_resolver_rules=None,
37683769
block_images=None,
37693770
do_not_track=None,
37703771
chromium_arg=None,
@@ -3822,6 +3823,7 @@ def get_new_driver(
38223823
enable_3d_apis - the option to enable WebGL and 3D APIs (Chrome)
38233824
swiftshader - the option to use Chrome's swiftshader (Chrome-only)
38243825
ad_block_on - the option to block ads from loading (Chromium-only)
3826+
host_resolver_rules - Configure host-resolver-rules (Chromium-only)
38253827
block_images - the option to block images from loading (Chrome)
38263828
do_not_track - indicate that websites should not track you (Chrome)
38273829
chromium_arg - the option to add a Chromium arg to Chrome/Edge
@@ -3937,6 +3939,8 @@ def get_new_driver(
39373939
swiftshader = self._swiftshader
39383940
if ad_block_on is None:
39393941
ad_block_on = self.ad_block_on
3942+
if host_resolver_rules is None:
3943+
host_resolver_rules = self.host_resolver_rules
39403944
if block_images is None:
39413945
block_images = self.block_images
39423946
if do_not_track is None:
@@ -4024,6 +4028,7 @@ def get_new_driver(
40244028
enable_3d_apis=enable_3d_apis,
40254029
swiftshader=swiftshader,
40264030
ad_block_on=ad_block_on,
4031+
host_resolver_rules=host_resolver_rules,
40274032
block_images=block_images,
40284033
do_not_track=do_not_track,
40294034
chromium_arg=chromium_arg,
@@ -14266,6 +14271,7 @@ def setUp(self, masterqa_mode=False):
1426614271
self.message_duration = sb_config.message_duration
1426714272
self.js_checking_on = sb_config.js_checking_on
1426814273
self.ad_block_on = sb_config.ad_block_on
14274+
self.host_resolver_rules = sb_config.host_resolver_rules
1426914275
self.block_images = sb_config.block_images
1427014276
self.do_not_track = sb_config.do_not_track
1427114277
self.chromium_arg = sb_config.chromium_arg
@@ -14633,6 +14639,7 @@ def setUp(self, masterqa_mode=False):
1463314639
enable_3d_apis=self.enable_3d_apis,
1463414640
swiftshader=self._swiftshader,
1463514641
ad_block_on=self.ad_block_on,
14642+
host_resolver_rules=self.host_resolver_rules,
1463614643
block_images=self.block_images,
1463714644
do_not_track=self.do_not_track,
1463814645
chromium_arg=self.chromium_arg,

seleniumbase/plugins/driver_manager.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ def Driver(
9999
enable_3d_apis=None, # Enable WebGL and 3D APIs.
100100
swiftshader=None, # Chrome: --use-gl=angle / --use-angle=swiftshader-webgl
101101
ad_block_on=None, # Block some types of display ads from loading.
102+
host_resolver_rules=None, # Set host-resolver-rules, comma-separated.
102103
block_images=None, # Block images from loading during tests.
103104
do_not_track=None, # Tell websites that you don't want to be tracked.
104105
chromium_arg=None, # "ARG=N,ARG2" (Set Chromium args, ","-separated.)
@@ -436,6 +437,15 @@ def Driver(
436437
ad_block_on = True
437438
else:
438439
ad_block_on = False
440+
if host_resolver_rules is None:
441+
if '--host-resolver-rules="' in arg_join:
442+
host_resolver_rules = (
443+
arg_join.split('--host-resolver-rules="')[1].split('"')[0]
444+
)
445+
elif '--host_resolver_rules="' in arg_join:
446+
host_resolver_rules = (
447+
arg_join.split("--host_resolver_rules=")[1].split('"')[0]
448+
)
439449
if driver_version is None:
440450
if "--driver-version=" in arg_join:
441451
driver_version = (
@@ -486,6 +496,7 @@ def Driver(
486496
enable_3d_apis=enable_3d_apis,
487497
swiftshader=swiftshader,
488498
ad_block_on=ad_block_on,
499+
host_resolver_rules=host_resolver_rules,
489500
block_images=block_images,
490501
do_not_track=do_not_track,
491502
chromium_arg=chromium_arg,

seleniumbase/plugins/pytest_plugin.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ def pytest_addoption(parser):
7676
--message-duration=SECONDS (The time length for Messenger alerts.)
7777
--check-js (Check for JavaScript errors after page loads.)
7878
--ad-block (Block some types of display ads from loading.)
79+
--host-resolver-rules=RULES (Set host-resolver-rules, comma-separated.)
7980
--block-images (Block images from loading during tests.)
8081
--do-not-track (Indicate to websites that you don't want to be tracked.)
8182
--verify-delay=SECONDS (The delay before MasterQA verification checks.)
@@ -822,6 +823,25 @@ def pytest_addoption(parser):
822823
help="""Using this makes WebDriver block display ads
823824
that are defined in ad_block_list.AD_BLOCK_LIST.""",
824825
)
826+
parser.addoption(
827+
"--host_resolver_rules",
828+
"--host-resolver-rules",
829+
action="store",
830+
dest="host_resolver_rules",
831+
default=None,
832+
help="""Use this option to set "host-resolver-rules".
833+
This lets you re-map traffic from any domain.
834+
Eg. "MAP www.google-analytics.com 0.0.0.0".
835+
Eg. "MAP * ~NOTFOUND , EXCLUDE myproxy".
836+
Eg. "MAP * 0.0.0.0 , EXCLUDE 127.0.0.1".
837+
Eg. "MAP *.google.com myproxy".
838+
Find more examples on these pages:
839+
(https://www.electronjs.org/docs/
840+
latest/api/command-line-switches)
841+
(https://www.chromium.org/developers/
842+
design-documents/network-stack/socks-proxy/)
843+
Use comma-separation for multiple host rules.""",
844+
)
825845
parser.addoption(
826846
"--block_images",
827847
"--block-images",
@@ -1499,6 +1519,7 @@ def pytest_configure(config):
14991519
sb_config.message_duration = config.getoption("message_duration")
15001520
sb_config.js_checking_on = config.getoption("js_checking_on")
15011521
sb_config.ad_block_on = config.getoption("ad_block_on")
1522+
sb_config.host_resolver_rules = config.getoption("host_resolver_rules")
15021523
sb_config.block_images = config.getoption("block_images")
15031524
sb_config.do_not_track = config.getoption("do_not_track")
15041525
sb_config.verify_delay = config.getoption("verify_delay")

seleniumbase/plugins/sb_manager.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ def SB(
6363
enable_3d_apis=None, # Enable WebGL and 3D APIs.
6464
swiftshader=None, # Chrome: --use-gl=angle / --use-angle=swiftshader-webgl
6565
ad_block_on=None, # Block some types of display ads from loading.
66+
host_resolver_rules=None, # Set host-resolver-rules, comma-separated.
6667
block_images=None, # Block images from loading during tests.
6768
do_not_track=None, # Tell websites that you don't want to be tracked.
6869
chromium_arg=None, # "ARG=N,ARG2" (Set Chromium args, ","-separated.)
@@ -604,6 +605,15 @@ def SB(
604605
ad_block_on = True
605606
else:
606607
ad_block_on = False
608+
if host_resolver_rules is None:
609+
if '--host-resolver-rules="' in arg_join:
610+
host_resolver_rules = (
611+
arg_join.split('--host-resolver-rules="')[1].split('"')[0]
612+
)
613+
elif '--host_resolver_rules="' in arg_join:
614+
host_resolver_rules = (
615+
arg_join.split("--host_resolver_rules=")[1].split('"')[0]
616+
)
607617
if driver_version is None:
608618
if "--driver-version=" in arg_join:
609619
driver_version = (
@@ -710,6 +720,7 @@ def SB(
710720
sb_config.dashboard = False
711721
sb_config._dashboard_initialized = False
712722
sb_config.message_duration = message_duration
723+
sb_config.host_resolver_rules = host_resolver_rules
713724
sb_config.block_images = block_images
714725
sb_config.do_not_track = do_not_track
715726
sb_config.use_wire = use_wire
@@ -811,6 +822,7 @@ def SB(
811822
sb.dashboard = sb_config.dashboard
812823
sb._dash_initialized = sb_config._dashboard_initialized
813824
sb.message_duration = sb_config.message_duration
825+
sb.host_resolver_rules = sb_config.host_resolver_rules
814826
sb.block_images = sb_config.block_images
815827
sb.do_not_track = sb_config.do_not_track
816828
sb.use_wire = sb_config.use_wire

seleniumbase/plugins/selenium_plugin.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ class SeleniumBrowser(Plugin):
5555
--message-duration=SECONDS (The time length for Messenger alerts.)
5656
--check-js (Check for JavaScript errors after page loads.)
5757
--ad-block (Block some types of display ads from loading.)
58+
--host-resolver-rules=RULES (Set host-resolver-rules, comma-separated.)
5859
--block-images (Block images from loading during tests.)
5960
--do-not-track (Indicate to websites that you don't want to be tracked.)
6061
--verify-delay=SECONDS (The delay before MasterQA verification checks.)
@@ -553,6 +554,25 @@ def options(self, parser, env):
553554
help="""Using this makes WebDriver block display ads
554555
that are defined in ad_block_list.AD_BLOCK_LIST.""",
555556
)
557+
parser.addoption(
558+
"--host_resolver_rules",
559+
"--host-resolver-rules",
560+
action="store",
561+
dest="host_resolver_rules",
562+
default=None,
563+
help="""Use this option to set "host-resolver-rules".
564+
This lets you re-map traffic from any domain.
565+
Eg. "MAP www.google-analytics.com 0.0.0.0".
566+
Eg. "MAP * ~NOTFOUND , EXCLUDE myproxy".
567+
Eg. "MAP * 0.0.0.0 , EXCLUDE 127.0.0.1".
568+
Eg. "MAP *.google.com myproxy".
569+
Find more examples on these pages:
570+
(https://www.electronjs.org/docs/
571+
latest/api/command-line-switches)
572+
(https://www.chromium.org/developers/
573+
design-documents/network-stack/socks-proxy/)
574+
Use comma-separation for multiple host rules.""",
575+
)
556576
parser.addoption(
557577
"--block_images",
558578
"--block-images",
@@ -1090,6 +1110,7 @@ def beforeTest(self, test):
10901110
test.test.message_duration = self.options.message_duration
10911111
test.test.js_checking_on = self.options.js_checking_on
10921112
test.test.ad_block_on = self.options.ad_block_on
1113+
test.test.host_resolver_rules = self.options.host_resolver_rules
10931114
test.test.block_images = self.options.block_images
10941115
test.test.do_not_track = self.options.do_not_track
10951116
test.test.verify_delay = self.options.verify_delay # MasterQA

0 commit comments

Comments
 (0)