Skip to content

Commit 5690d42

Browse files
committed
Improve logging
1 parent d03a64c commit 5690d42

File tree

5 files changed

+106
-62
lines changed

5 files changed

+106
-62
lines changed

seleniumbase/core/browser_launcher.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1433,6 +1433,7 @@ def get_local_driver(
14331433
sb_install.main(override="iedriver")
14341434
sys.argv = sys_args # Put back the original sys args
14351435
if not headless:
1436+
warnings.simplefilter("ignore", category=DeprecationWarning)
14361437
return webdriver.Ie(capabilities=ie_capabilities)
14371438
else:
14381439
warnings.simplefilter("ignore", category=DeprecationWarning)

seleniumbase/core/log_helper.py

Lines changed: 88 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,65 @@ def get_master_time():
6565
return timestamp, the_date, the_time
6666

6767

68+
def get_browser_version(driver):
69+
driver_capabilities = driver.capabilities
70+
if "version" in driver_capabilities:
71+
browser_version = driver_capabilities["version"]
72+
else:
73+
browser_version = driver_capabilities["browserVersion"]
74+
return browser_version
75+
76+
77+
def get_driver_name_and_version(driver, browser):
78+
if driver.capabilities["browserName"].lower() == "chrome":
79+
cap_dict = driver.capabilities["chrome"]
80+
return ("chromedriver", cap_dict["chromedriverVersion"].split(" ")[0])
81+
elif driver.capabilities["browserName"].lower() == "msedge":
82+
cap_dict = driver.capabilities["msedge"]
83+
return ("msedgedriver", cap_dict["msedgedriverVersion"].split(" ")[0])
84+
elif driver.capabilities["browserName"].lower() == "opera":
85+
cap_dict = driver.capabilities["opera"]
86+
return ("operadriver", cap_dict["operadriverVersion"].split(" ")[0])
87+
elif driver.capabilities["browserName"].lower() == "firefox":
88+
return ("geckodriver", driver.capabilities["moz:geckodriverVersion"])
89+
elif browser == "safari":
90+
return ("safaridriver", get_browser_version(driver))
91+
elif browser == "ie":
92+
return ("iedriver", get_browser_version(driver))
93+
else:
94+
return None
95+
96+
6897
def log_test_failure_data(test, test_logpath, driver, browser, url=None):
6998
import traceback
7099

100+
browser_displayed = browser
101+
driver_displayed = None
102+
browser_version = None
103+
driver_version = None
104+
driver_name = None
105+
try:
106+
browser_version = get_browser_version(driver)
107+
except Exception:
108+
pass
109+
try:
110+
driver_name, driver_version = get_driver_name_and_version(
111+
driver, browser
112+
)
113+
except Exception:
114+
pass
115+
if browser_version:
116+
headless = ""
117+
if test.headless and browser in ["chrome", "edge", "firefox"]:
118+
headless = " / headless"
119+
browser_displayed = "%s (%s%s)" % (browser, browser_version, headless)
120+
if driver_name and driver_version:
121+
driver_displayed = "%s (%s)" % (driver_name, driver_version)
122+
if not browser_version:
123+
browser_displayed = browser
124+
driver_displayed = "(Unknown Driver)"
125+
if not driver_displayed:
126+
driver_displayed = "(Unknown Driver)"
71127
basic_info_name = settings.BASIC_INFO_NAME
72128
basic_file_path = "%s/%s" % (test_logpath, basic_info_name)
73129
if url:
@@ -82,7 +138,8 @@ def log_test_failure_data(test, test_logpath, driver, browser, url=None):
82138
"--------------------------------------------------------------------"
83139
)
84140
data_to_save.append("Last Page: %s" % last_page)
85-
data_to_save.append(" Browser: %s" % browser)
141+
data_to_save.append(" Browser: %s" % browser_displayed)
142+
data_to_save.append(" Driver: %s" % driver_displayed)
86143
data_to_save.append("Timestamp: %s" % timestamp)
87144
data_to_save.append(" Date: %s" % the_date)
88145
data_to_save.append(" Time: %s" % the_time)
@@ -140,7 +197,34 @@ def log_test_failure_data(test, test_logpath, driver, browser, url=None):
140197
log_file.close()
141198

142199

143-
def log_skipped_test_data(test, test_logpath, browser, reason):
200+
def log_skipped_test_data(test, test_logpath, driver, browser, reason):
201+
browser_displayed = browser
202+
driver_displayed = None
203+
browser_version = None
204+
driver_version = None
205+
driver_name = None
206+
try:
207+
browser_version = get_browser_version(driver)
208+
except Exception:
209+
pass
210+
try:
211+
driver_name, driver_version = get_driver_name_and_version(
212+
driver, browser
213+
)
214+
except Exception:
215+
pass
216+
if browser_version:
217+
headless = ""
218+
if test.headless and browser in ["chrome", "edge", "firefox"]:
219+
headless = " / headless"
220+
browser_displayed = "%s (%s%s)" % (browser, browser_version, headless)
221+
if driver_name and driver_version:
222+
driver_displayed = "%s (%s)" % (driver_name, driver_version)
223+
if not browser_version:
224+
browser_displayed = browser
225+
driver_displayed = "(Unknown Driver)"
226+
if not driver_displayed:
227+
driver_displayed = "(Unknown Driver)"
144228
timestamp, the_date, the_time = get_master_time()
145229
test_id = get_test_id(test) # pytest runnable display_id (with the "::")
146230
data_to_save = []
@@ -149,7 +233,8 @@ def log_skipped_test_data(test, test_logpath, browser, reason):
149233
"--------------------------------------------------------------------"
150234
)
151235
data_to_save.append(" Outcome: SKIPPED")
152-
data_to_save.append(" Browser: %s" % browser)
236+
data_to_save.append(" Browser: %s" % browser_displayed)
237+
data_to_save.append(" Driver: %s" % driver_displayed)
153238
data_to_save.append(" Timestamp: %s" % timestamp)
154239
data_to_save.append(" Date: %s" % the_date)
155240
data_to_save.append(" Time: %s" % the_time)

seleniumbase/core/report_helper.py

Lines changed: 6 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,14 @@
22
import shutil
33
import sys
44
import time
5-
from selenium import webdriver
65
from seleniumbase.config import settings
76
from seleniumbase.core.style_sheet import style
87
from seleniumbase.fixtures import page_actions
9-
from seleniumbase import drivers
108

119
LATEST_REPORT_DIR = settings.LATEST_REPORT_DIR
1210
ARCHIVE_DIR = settings.REPORT_ARCHIVE_DIR
1311
HTML_REPORT = settings.HTML_REPORT
1412
RESULTS_TABLE = settings.RESULTS_TABLE
15-
DRIVER_DIR = os.path.dirname(os.path.realpath(drivers.__file__))
16-
PLATFORM = sys.platform
17-
LOCAL_CHROMEDRIVER = None
18-
LOCAL_GECKODRIVER = None
19-
if "darwin" in PLATFORM or "linux" in PLATFORM:
20-
LOCAL_CHROMEDRIVER = DRIVER_DIR + "/chromedriver"
21-
LOCAL_GECKODRIVER = DRIVER_DIR + "/geckodriver"
22-
LOCAL_EDGEDRIVER = DRIVER_DIR + "/msedgedriver"
23-
elif "win32" in PLATFORM or "win64" in PLATFORM or "x64" in PLATFORM:
24-
LOCAL_CHROMEDRIVER = DRIVER_DIR + "/chromedriver.exe"
25-
LOCAL_GECKODRIVER = DRIVER_DIR + "/geckodriver.exe"
26-
LOCAL_EDGEDRIVER = DRIVER_DIR + "/msedgedriver.exe"
2713

2814

2915
def get_timestamp():
@@ -283,46 +269,11 @@ def build_report(
283269
)
284270
print("")
285271
if show_report:
286-
browser = None
287-
profile = webdriver.FirefoxProfile()
288-
profile.set_preference("app.update.auto", False)
289-
profile.set_preference("app.update.enabled", False)
290-
profile.set_preference("browser.privatebrowsing.autostart", True)
291-
if browser_type == "firefox":
292-
if LOCAL_GECKODRIVER and os.path.exists(LOCAL_GECKODRIVER):
293-
browser = webdriver.Firefox(
294-
firefox_profile=profile, executable_path=LOCAL_GECKODRIVER
295-
)
296-
else:
297-
browser = webdriver.Firefox(firefox_profile=profile)
298-
elif browser_type == "edge":
299-
edge_options = webdriver.ChromeOptions()
300-
edge_options.add_experimental_option(
301-
"excludeSwitches", ["enable-automation", "enable-logging"]
302-
)
303-
edge_options.add_argument("--test-type")
304-
edge_options.add_argument("--disable-infobars")
305-
if LOCAL_CHROMEDRIVER and os.path.exists(LOCAL_EDGEDRIVER):
306-
browser = webdriver.Chrome(
307-
executable_path=LOCAL_EDGEDRIVER, options=edge_options
308-
)
309-
else:
310-
browser = webdriver.Chrome(options=edge_options)
311-
else:
312-
chrome_options = webdriver.ChromeOptions()
313-
chrome_options.add_experimental_option(
314-
"excludeSwitches", ["enable-automation", "enable-logging"]
315-
)
316-
chrome_options.add_argument("--test-type")
317-
chrome_options.add_argument("--disable-infobars")
318-
if LOCAL_CHROMEDRIVER and os.path.exists(LOCAL_CHROMEDRIVER):
319-
browser = webdriver.Chrome(
320-
executable_path=LOCAL_CHROMEDRIVER, options=chrome_options
321-
)
322-
else:
323-
browser = webdriver.Chrome(options=chrome_options)
324-
browser.get("file://%s" % archived_results_file)
272+
from seleniumbase import get_driver
273+
274+
driver = get_driver(browser_type, headless=False)
275+
driver.get("file://%s" % archived_results_file)
325276
print("\n*** Close the html report window to continue. ***")
326-
while len(browser.window_handles):
277+
while len(driver.window_handles):
327278
time.sleep(0.1)
328-
browser.quit()
279+
driver.quit()

seleniumbase/fixtures/base_case.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5870,7 +5870,9 @@ def skip(self, reason=""):
58705870
browser = self.browser
58715871
if not reason:
58725872
reason = "No skip reason given"
5873-
log_helper.log_skipped_test_data(self, test_logpath, browser, reason)
5873+
log_helper.log_skipped_test_data(
5874+
self, test_logpath, self.driver, browser, reason
5875+
)
58745876
# Finally skip the test for real
58755877
self.skipTest(reason)
58765878

seleniumbase/fixtures/page_actions.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -850,13 +850,17 @@ def _get_last_page(driver):
850850
return last_page
851851

852852

853-
def save_test_failure_data(driver, name, browser_type, folder=None):
853+
def save_test_failure_data(driver, name, browser_type=None, folder=None):
854854
"""
855-
Saves failure data to the current directory (or to a subfolder if provided)
855+
Saves failure data to the current directory, or to a subfolder if provided.
856+
If {name} does not end in ".txt", it will get added to it.
857+
If {browser_type} is provided, the logs will include that.
856858
If the folder provided doesn't exist, it will get created.
857859
"""
858860
import traceback
859861

862+
if not name.endswith(".txt"):
863+
name = name + ".txt"
860864
if folder:
861865
abs_path = os.path.abspath(".")
862866
file_path = abs_path + "/%s" % folder
@@ -869,7 +873,8 @@ def save_test_failure_data(driver, name, browser_type, folder=None):
869873
last_page = _get_last_page(driver)
870874
data_to_save = []
871875
data_to_save.append("Last_Page: %s" % last_page)
872-
data_to_save.append("Browser: %s " % browser_type)
876+
if browser_type:
877+
data_to_save.append("Browser: %s " % browser_type)
873878
data_to_save.append(
874879
"Traceback: "
875880
+ "".join(

0 commit comments

Comments
 (0)