Add option for setting "--host-resolver-rules=RULES"

This commit is contained in:
Michael Mintz 2023-11-14 21:10:53 -05:00
parent f7568e0193
commit 1e949977c3
8 changed files with 100 additions and 0 deletions

View File

@ -84,6 +84,7 @@ if pure_python:
sb._disable_beforeunload = False
sb.save_screenshot_after_test = False
sb.no_screenshot_after_test = False
sb.host_resolver_rules = None
sb.page_load_strategy = None
sb.timeout_multiplier = None
sb.pytest_html_report = None

View File

@ -230,6 +230,7 @@ def get_configured_sb(context):
sb.proxy_bypass_list = None
sb.proxy_pac_url = None
sb.multi_proxy = False
sb.host_resolver_rules = None
sb.enable_3d_apis = False
sb.swiftshader = False
sb.ad_block_on = False
@ -772,6 +773,13 @@ def get_configured_sb(context):
if low_key in ["multi-proxy", "multi_proxy"]:
sb.multi_proxy = True
continue
# Handle: -D host-resolver-rules=RULES / host_resolver_rules=RULES
if low_key in ["host-resolver-rules", "host_resolver_rules"]:
host_resolver_rules = userdata[key]
if host_resolver_rules == "true":
host_resolver_rules = sb.host_resolver_rules
sb.host_resolver_rules = host_resolver_rules
continue
# Handle: -D enable-3d-apis / enable_3d_apis
if low_key in ["enable-3d-apis", "enable_3d_apis"]:
sb.enable_3d_apis = True

View File

@ -756,6 +756,7 @@ def _set_chrome_options(
enable_3d_apis,
swiftshader,
ad_block_on,
host_resolver_rules,
block_images,
do_not_track,
chromium_arg,
@ -837,6 +838,10 @@ def _set_chrome_options(
chrome_options.set_capability(
"goog:loggingPrefs", {"performance": "ALL", "browser": "ALL"}
)
if host_resolver_rules:
chrome_options.add_argument(
"--host-resolver-rules=%s" % host_resolver_rules
)
if mobile_emulator and not is_using_uc(undetectable, browser_name):
emulator_settings = {}
device_metrics = {}
@ -1320,6 +1325,7 @@ def get_driver(
enable_3d_apis=False,
swiftshader=False,
ad_block_on=False,
host_resolver_rules=None,
block_images=False,
do_not_track=False,
chromium_arg=None,
@ -1531,6 +1537,7 @@ def get_driver(
enable_3d_apis,
swiftshader,
ad_block_on,
host_resolver_rules,
block_images,
do_not_track,
chromium_arg,
@ -1585,6 +1592,7 @@ def get_driver(
enable_3d_apis,
swiftshader,
ad_block_on,
host_resolver_rules,
block_images,
do_not_track,
chromium_arg,
@ -1643,6 +1651,7 @@ def get_remote_driver(
enable_3d_apis,
swiftshader,
ad_block_on,
host_resolver_rules,
block_images,
do_not_track,
chromium_arg,
@ -1764,6 +1773,7 @@ def get_remote_driver(
enable_3d_apis,
swiftshader,
ad_block_on,
host_resolver_rules,
block_images,
do_not_track,
chromium_arg,
@ -1928,6 +1938,7 @@ def get_remote_driver(
enable_3d_apis,
swiftshader,
ad_block_on,
host_resolver_rules,
block_images,
do_not_track,
chromium_arg,
@ -2042,6 +2053,7 @@ def get_local_driver(
enable_3d_apis,
swiftshader,
ad_block_on,
host_resolver_rules,
block_images,
do_not_track,
chromium_arg,
@ -2453,6 +2465,10 @@ def get_local_driver(
edge_options.set_capability(
"ms:loggingPrefs", {"performance": "ALL", "browser": "ALL"}
)
if host_resolver_rules:
edge_options.add_argument(
"--host-resolver-rules=%s" % host_resolver_rules
)
if not enable_sync:
edge_options.add_argument("--disable-sync")
if (
@ -2795,6 +2811,7 @@ def get_local_driver(
enable_3d_apis,
swiftshader,
ad_block_on,
host_resolver_rules,
block_images,
do_not_track,
chromium_arg,
@ -3295,6 +3312,7 @@ def get_local_driver(
enable_3d_apis,
swiftshader,
None, # ad_block_on
None, # host_resolver_rules
block_images,
do_not_track,
None, # chromium_arg
@ -3511,6 +3529,7 @@ def get_local_driver(
enable_3d_apis,
swiftshader,
None, # ad_block_on
None, # host_resolver_rules
block_images,
do_not_track,
None, # chromium_arg

View File

@ -3765,6 +3765,7 @@ class BaseCase(unittest.TestCase):
enable_3d_apis=None,
swiftshader=None,
ad_block_on=None,
host_resolver_rules=None,
block_images=None,
do_not_track=None,
chromium_arg=None,
@ -3822,6 +3823,7 @@ class BaseCase(unittest.TestCase):
enable_3d_apis - the option to enable WebGL and 3D APIs (Chrome)
swiftshader - the option to use Chrome's swiftshader (Chrome-only)
ad_block_on - the option to block ads from loading (Chromium-only)
host_resolver_rules - Configure host-resolver-rules (Chromium-only)
block_images - the option to block images from loading (Chrome)
do_not_track - indicate that websites should not track you (Chrome)
chromium_arg - the option to add a Chromium arg to Chrome/Edge
@ -3937,6 +3939,8 @@ class BaseCase(unittest.TestCase):
swiftshader = self._swiftshader
if ad_block_on is None:
ad_block_on = self.ad_block_on
if host_resolver_rules is None:
host_resolver_rules = self.host_resolver_rules
if block_images is None:
block_images = self.block_images
if do_not_track is None:
@ -4024,6 +4028,7 @@ class BaseCase(unittest.TestCase):
enable_3d_apis=enable_3d_apis,
swiftshader=swiftshader,
ad_block_on=ad_block_on,
host_resolver_rules=host_resolver_rules,
block_images=block_images,
do_not_track=do_not_track,
chromium_arg=chromium_arg,
@ -14266,6 +14271,7 @@ class BaseCase(unittest.TestCase):
self.message_duration = sb_config.message_duration
self.js_checking_on = sb_config.js_checking_on
self.ad_block_on = sb_config.ad_block_on
self.host_resolver_rules = sb_config.host_resolver_rules
self.block_images = sb_config.block_images
self.do_not_track = sb_config.do_not_track
self.chromium_arg = sb_config.chromium_arg
@ -14633,6 +14639,7 @@ class BaseCase(unittest.TestCase):
enable_3d_apis=self.enable_3d_apis,
swiftshader=self._swiftshader,
ad_block_on=self.ad_block_on,
host_resolver_rules=self.host_resolver_rules,
block_images=self.block_images,
do_not_track=self.do_not_track,
chromium_arg=self.chromium_arg,

View File

@ -99,6 +99,7 @@ def Driver(
enable_3d_apis=None, # Enable WebGL and 3D APIs.
swiftshader=None, # Chrome: --use-gl=angle / --use-angle=swiftshader-webgl
ad_block_on=None, # Block some types of display ads from loading.
host_resolver_rules=None, # Set host-resolver-rules, comma-separated.
block_images=None, # Block images from loading during tests.
do_not_track=None, # Tell websites that you don't want to be tracked.
chromium_arg=None, # "ARG=N,ARG2" (Set Chromium args, ","-separated.)
@ -436,6 +437,15 @@ def Driver(
ad_block_on = True
else:
ad_block_on = False
if host_resolver_rules is None:
if '--host-resolver-rules="' in arg_join:
host_resolver_rules = (
arg_join.split('--host-resolver-rules="')[1].split('"')[0]
)
elif '--host_resolver_rules="' in arg_join:
host_resolver_rules = (
arg_join.split("--host_resolver_rules=")[1].split('"')[0]
)
if driver_version is None:
if "--driver-version=" in arg_join:
driver_version = (
@ -486,6 +496,7 @@ def Driver(
enable_3d_apis=enable_3d_apis,
swiftshader=swiftshader,
ad_block_on=ad_block_on,
host_resolver_rules=host_resolver_rules,
block_images=block_images,
do_not_track=do_not_track,
chromium_arg=chromium_arg,

View File

@ -76,6 +76,7 @@ def pytest_addoption(parser):
--message-duration=SECONDS (The time length for Messenger alerts.)
--check-js (Check for JavaScript errors after page loads.)
--ad-block (Block some types of display ads from loading.)
--host-resolver-rules=RULES (Set host-resolver-rules, comma-separated.)
--block-images (Block images from loading during tests.)
--do-not-track (Indicate to websites that you don't want to be tracked.)
--verify-delay=SECONDS (The delay before MasterQA verification checks.)
@ -822,6 +823,25 @@ def pytest_addoption(parser):
help="""Using this makes WebDriver block display ads
that are defined in ad_block_list.AD_BLOCK_LIST.""",
)
parser.addoption(
"--host_resolver_rules",
"--host-resolver-rules",
action="store",
dest="host_resolver_rules",
default=None,
help="""Use this option to set "host-resolver-rules".
This lets you re-map traffic from any domain.
Eg. "MAP www.google-analytics.com 0.0.0.0".
Eg. "MAP * ~NOTFOUND , EXCLUDE myproxy".
Eg. "MAP * 0.0.0.0 , EXCLUDE 127.0.0.1".
Eg. "MAP *.google.com myproxy".
Find more examples on these pages:
(https://www.electronjs.org/docs/
latest/api/command-line-switches)
(https://www.chromium.org/developers/
design-documents/network-stack/socks-proxy/)
Use comma-separation for multiple host rules.""",
)
parser.addoption(
"--block_images",
"--block-images",
@ -1499,6 +1519,7 @@ def pytest_configure(config):
sb_config.message_duration = config.getoption("message_duration")
sb_config.js_checking_on = config.getoption("js_checking_on")
sb_config.ad_block_on = config.getoption("ad_block_on")
sb_config.host_resolver_rules = config.getoption("host_resolver_rules")
sb_config.block_images = config.getoption("block_images")
sb_config.do_not_track = config.getoption("do_not_track")
sb_config.verify_delay = config.getoption("verify_delay")

View File

@ -63,6 +63,7 @@ def SB(
enable_3d_apis=None, # Enable WebGL and 3D APIs.
swiftshader=None, # Chrome: --use-gl=angle / --use-angle=swiftshader-webgl
ad_block_on=None, # Block some types of display ads from loading.
host_resolver_rules=None, # Set host-resolver-rules, comma-separated.
block_images=None, # Block images from loading during tests.
do_not_track=None, # Tell websites that you don't want to be tracked.
chromium_arg=None, # "ARG=N,ARG2" (Set Chromium args, ","-separated.)
@ -604,6 +605,15 @@ def SB(
ad_block_on = True
else:
ad_block_on = False
if host_resolver_rules is None:
if '--host-resolver-rules="' in arg_join:
host_resolver_rules = (
arg_join.split('--host-resolver-rules="')[1].split('"')[0]
)
elif '--host_resolver_rules="' in arg_join:
host_resolver_rules = (
arg_join.split("--host_resolver_rules=")[1].split('"')[0]
)
if driver_version is None:
if "--driver-version=" in arg_join:
driver_version = (
@ -710,6 +720,7 @@ def SB(
sb_config.dashboard = False
sb_config._dashboard_initialized = False
sb_config.message_duration = message_duration
sb_config.host_resolver_rules = host_resolver_rules
sb_config.block_images = block_images
sb_config.do_not_track = do_not_track
sb_config.use_wire = use_wire
@ -811,6 +822,7 @@ def SB(
sb.dashboard = sb_config.dashboard
sb._dash_initialized = sb_config._dashboard_initialized
sb.message_duration = sb_config.message_duration
sb.host_resolver_rules = sb_config.host_resolver_rules
sb.block_images = sb_config.block_images
sb.do_not_track = sb_config.do_not_track
sb.use_wire = sb_config.use_wire

View File

@ -55,6 +55,7 @@ class SeleniumBrowser(Plugin):
--message-duration=SECONDS (The time length for Messenger alerts.)
--check-js (Check for JavaScript errors after page loads.)
--ad-block (Block some types of display ads from loading.)
--host-resolver-rules=RULES (Set host-resolver-rules, comma-separated.)
--block-images (Block images from loading during tests.)
--do-not-track (Indicate to websites that you don't want to be tracked.)
--verify-delay=SECONDS (The delay before MasterQA verification checks.)
@ -553,6 +554,25 @@ class SeleniumBrowser(Plugin):
help="""Using this makes WebDriver block display ads
that are defined in ad_block_list.AD_BLOCK_LIST.""",
)
parser.addoption(
"--host_resolver_rules",
"--host-resolver-rules",
action="store",
dest="host_resolver_rules",
default=None,
help="""Use this option to set "host-resolver-rules".
This lets you re-map traffic from any domain.
Eg. "MAP www.google-analytics.com 0.0.0.0".
Eg. "MAP * ~NOTFOUND , EXCLUDE myproxy".
Eg. "MAP * 0.0.0.0 , EXCLUDE 127.0.0.1".
Eg. "MAP *.google.com myproxy".
Find more examples on these pages:
(https://www.electronjs.org/docs/
latest/api/command-line-switches)
(https://www.chromium.org/developers/
design-documents/network-stack/socks-proxy/)
Use comma-separation for multiple host rules.""",
)
parser.addoption(
"--block_images",
"--block-images",
@ -1090,6 +1110,7 @@ class SeleniumBrowser(Plugin):
test.test.message_duration = self.options.message_duration
test.test.js_checking_on = self.options.js_checking_on
test.test.ad_block_on = self.options.ad_block_on
test.test.host_resolver_rules = self.options.host_resolver_rules
test.test.block_images = self.options.block_images
test.test.do_not_track = self.options.do_not_track
test.test.verify_delay = self.options.verify_delay # MasterQA