Skip to content

Commit 03e9baa

Browse files
committed
Add the inspect_html() method
1 parent c5d2c04 commit 03e9baa

File tree

2 files changed

+73
-0
lines changed

2 files changed

+73
-0
lines changed

seleniumbase/fixtures/base_case.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2022,6 +2022,49 @@ def assert_no_js_errors(self):
20222022
messenger_post = ("ASSERT NO JS ERRORS")
20232023
self.__highlight_with_assert_success(messenger_post, "html")
20242024

2025+
def __activate_html_inspector(self):
2026+
js_utils.activate_html_inspector(self.driver)
2027+
2028+
def inspect_html(self):
2029+
""" Inspects the Page HTML with HTML-Inspector.
2030+
(https://github.com/philipwalton/html-inspector)
2031+
(https://cdnjs.com/libraries/html-inspector)
2032+
Prints the results and also returns them. """
2033+
self.__activate_html_inspector()
2034+
script = ("""HTMLInspector.inspect();""")
2035+
self.execute_script(script)
2036+
time.sleep(0.1)
2037+
browser_logs = []
2038+
try:
2039+
browser_logs = self.driver.get_log('browser')
2040+
except (ValueError, WebDriverException):
2041+
# If unable to get browser logs, skip the assert and return.
2042+
return("(Unable to Inspect HTML! -> Only works on Chrome!)")
2043+
messenger_library = "//cdnjs.cloudflare.com/ajax/libs/messenger"
2044+
url = self.get_current_url()
2045+
header = '\n* HTML Inspection Results: %s' % url
2046+
results = [header]
2047+
row_count = 0
2048+
for entry in browser_logs:
2049+
message = entry['message']
2050+
if "0:6053 " in message:
2051+
message = message.split("0:6053")[1]
2052+
message = message.replace("\\u003C", "<")
2053+
if message.startswith(' "') and message.count('"') == 2:
2054+
message = message.split('"')[1]
2055+
message = "X - " + message
2056+
if messenger_library not in message:
2057+
if message not in results:
2058+
results.append(message)
2059+
row_count += 1
2060+
if row_count > 0:
2061+
results.append('* (See the Console output for details!)')
2062+
else:
2063+
results.append('* (No issues detected!)')
2064+
results = '\n'.join(results)
2065+
print(results)
2066+
return(results)
2067+
20252068
def get_google_auth_password(self, totp_key=None):
20262069
""" Returns a time-based one-time password based on the
20272070
Google Authenticator password algorithm. Works with Authy.

seleniumbase/fixtures/js_utils.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,14 @@ def wait_for_angularjs(driver, timeout=settings.LARGE_TIMEOUT, **kwargs):
7575
time.sleep(0.05)
7676

7777

78+
def is_html_inspector_activated(driver):
79+
try:
80+
driver.execute_script("HTMLInspector") # Fails if not defined
81+
return True
82+
except Exception:
83+
return False
84+
85+
7886
def is_jquery_activated(driver):
7987
try:
8088
driver.execute_script("jQuery('html')") # Fails if jq is not defined
@@ -386,6 +394,28 @@ def activate_jquery_confirm(driver):
386394
time.sleep(0.1)
387395

388396

397+
def activate_html_inspector(driver):
398+
jquery_js = constants.JQuery.MIN_JS
399+
html_inspector_js = constants.HtmlInspector.MIN_JS
400+
401+
if is_html_inspector_activated(driver):
402+
return
403+
if not is_jquery_activated(driver):
404+
add_js_link(driver, jquery_js)
405+
wait_for_jquery_active(driver, timeout=0.6)
406+
add_js_link(driver, html_inspector_js)
407+
408+
for x in range(7):
409+
# HTML-Inspector needs a small amount of time to load & activate.
410+
try:
411+
driver.execute_script("HTMLInspector")
412+
wait_for_ready_state_complete(driver)
413+
wait_for_angularjs(driver)
414+
return
415+
except Exception:
416+
time.sleep(0.1)
417+
418+
389419
def activate_messenger(driver):
390420
jquery_js = constants.JQuery.MIN_JS
391421
messenger_css = constants.Messenger.MIN_CSS

0 commit comments

Comments
 (0)