Skip to content

Commit 1b9c750

Browse files
authored
Merge pull request #889 from seleniumbase/mostly-dashboard-updates
Dashboard upgrades and a lot more
2 parents da53753 + a346d15 commit 1b9c750

35 files changed

+2318
-1083
lines changed

docs/img/dash_pie.png

-2.12 KB
Loading

docs/requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ pymdown-extensions==8.1.1
1010
importlib-metadata==4.0.1;python_version>="3.6"
1111
lunr==0.5.8
1212
mkdocs==1.1.2
13-
mkdocs-material==7.1.2
13+
mkdocs-material==7.1.3
1414
mkdocs-exclude-search==0.5.1;python_version>="3.6"
1515
mkdocs-simple-hooks==0.1.3
1616
mkdocs-material-extensions==1.0.1

examples/fail_if_old_driver_test.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
from seleniumbase import BaseCase
2+
3+
4+
class ChromedriverTests(BaseCase):
5+
6+
def test_fail_if_using_an_old_chromedriver(self):
7+
if self.browser != "chrome":
8+
print("\n This test is only for Chrome!")
9+
print(" (Run with: '--browser=chrome')")
10+
self.skip("This test is only for Chrome!")
11+
chrome_version = self.get_chrome_version()
12+
major_chrome_version = chrome_version.split('.')[0]
13+
chromedriver_version = self.get_chromedriver_version()
14+
major_chromedriver_version = chromedriver_version.split('.')[0]
15+
install_sb = "sbase install chromedriver %s" % major_chrome_version
16+
if (
17+
int(major_chromedriver_version) < 73
18+
and int(major_chrome_version) >= 73
19+
):
20+
message = (
21+
'Your version of chromedriver: "%s"\n '
22+
'is too old for your version of Chrome: "%s"\n'
23+
'You should upgrade chromedriver '
24+
"to receive important bug fixes!\n"
25+
'Run this command to upgrade: "%s"'
26+
% (chromedriver_version, chrome_version, install_sb)
27+
)
28+
raise Exception(message) # chromedriver is out-of-date

examples/image_test.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import os
12
import pytest
23
from seleniumbase import BaseCase
34

@@ -12,7 +13,8 @@ def test_pull_image_from_website(self):
1213
file_name = "comic.png"
1314
folder = "images_exported"
1415
self.save_element_as_image_file(selector, file_name, folder)
15-
print('"%s/%s" has been saved!' % (folder, file_name))
16+
self.assert_true(os.path.exists("%s/%s" % (folder, file_name)))
17+
print('\n"%s/%s" was saved!' % (folder, file_name))
1618

1719
@pytest.mark.run(order=2)
1820
def test_add_text_overlay_to_image(self):
@@ -24,7 +26,8 @@ def test_add_text_overlay_to_image(self):
2426
overlay_text = 'This is an XKCD comic!\nTitle: "My Sky"'
2527
self.save_element_as_image_file(
2628
selector, file_name, folder, overlay_text)
27-
print('"%s/%s" has been saved!' % (folder, file_name))
29+
self.assert_true(os.path.exists("%s/%s" % (folder, file_name)))
30+
print('\n"%s/%s" was saved!' % (folder, file_name))
2831

2932
@pytest.mark.run(order=3)
3033
def test_add_text_overlay_to_page_section(self):
@@ -40,7 +43,8 @@ def test_add_text_overlay_to_page_section(self):
4043
% self.get_current_url())
4144
self.save_element_as_image_file(
4245
selector, file_name, folder, overlay_text)
43-
print('"%s/%s" has been saved!' % (folder, file_name))
46+
self.assert_true(os.path.exists("%s/%s" % (folder, file_name)))
47+
print('\n"%s/%s" was saved!' % (folder, file_name))
4448

4549
@pytest.mark.run(order=4)
4650
def test_add_text_overlay_to_full_page(self):
@@ -53,4 +57,5 @@ def test_add_text_overlay_to_full_page(self):
5357
overlay_text = ("A text overlay on %s" % self.get_current_url())
5458
self.save_element_as_image_file(
5559
selector, file_name, folder, overlay_text)
56-
print('"%s/%s" has been saved!' % (folder, file_name))
60+
self.assert_true(os.path.exists("%s/%s" % (folder, file_name)))
61+
print('\n"%s/%s" was saved!' % (folder, file_name))

examples/test_checkboxes.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ class CheckboxTests(BaseCase):
66
def test_checkboxes_and_radio_buttons(self):
77
self.open("https://www.w3schools.com/tags/tryit.asp"
88
"?filename=tryhtml5_input_type_checkbox")
9+
self.ad_block()
910
self.switch_to_frame("iframeResult")
1011
checkbox = "input#vehicle2"
1112
self.assert_false(self.is_selected(checkbox))

examples/test_chromedriver.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,9 @@ def test_chromedriver_matches_chrome(self):
1313
print("\n This test is only for Chrome!")
1414
print(" (Run with: '--browser=chrome')")
1515
self.skip("This test is only for Chrome!")
16-
driver_capabilities = self.driver.capabilities
17-
if "version" in driver_capabilities:
18-
chrome_version = driver_capabilities["version"]
19-
else:
20-
chrome_version = driver_capabilities["browserVersion"]
16+
chrome_version = self.get_chrome_version()
2117
major_chrome_version = chrome_version.split('.')[0]
22-
chrome_dict = self.driver.capabilities["chrome"]
23-
chromedriver_version = chrome_dict["chromedriverVersion"]
24-
chromedriver_version = chromedriver_version.split(' ')[0]
18+
chromedriver_version = self.get_chromedriver_version()
2519
major_chromedriver_version = chromedriver_version.split('.')[0]
2620
colorama.init(autoreset=True)
2721
c1 = colorama.Fore.BLUE + colorama.Back.LIGHTCYAN_EX

examples/test_download_files.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,20 @@ def test_download_files(self):
1414
# Click the links to download the files into: "./downloaded_files/"
1515
# (If using Safari, IE, or Chromium Guest Mode: download directly.)
1616
# (The default Downloads Folder can't be changed when using those.)
17+
# (The same problem occurs when using an out-of-date chromedriver.)
18+
# (Use self.get_browser_downloads_folder() to get the folder used.)
1719
whl_selector = 'div#files a[href$="%s"]' % whl_file
1820
tar_selector = 'div#files a[href$="%s"]' % tar_gz_file
19-
if self.browser == "safari" or self.browser == "ie" or (
20-
self.is_chromium() and self.guest_mode and not self.headless):
21+
if (
22+
self.browser == "safari"
23+
or self.browser == "ie"
24+
or (self.is_chromium() and self.guest_mode and not self.headless)
25+
or (
26+
self.browser == "chrome"
27+
and self.is_chromedriver_too_old()
28+
and self.headless
29+
)
30+
):
2131
whl_href = self.get_attribute(whl_selector, "href")
2232
tar_href = self.get_attribute(tar_selector, "href")
2333
self.download_file(whl_href)

examples/test_save_screenshots.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import os
2+
from seleniumbase import BaseCase
3+
4+
5+
class ScreenshotTests(BaseCase):
6+
7+
def test_save_screenshot(self):
8+
self.open("https://seleniumbase.io/demo_page")
9+
# "./downloaded_files" is a special SeleniumBase folder for downloads
10+
self.save_screenshot("demo_page.png", folder="./downloaded_files")
11+
self.assert_downloaded_file("demo_page.png")
12+
print('\n"%s/%s" was saved!' % ("downloaded_files", "demo_page.png"))
13+
14+
def test_save_screenshot_to_logs(self):
15+
self.open("https://seleniumbase.io/demo_page")
16+
self.save_screenshot_to_logs()
17+
# "self.log_path" is the absolute path to the "./latest_logs" folder.
18+
# Each test that generates log files will create a subfolder in there
19+
test_logpath = os.path.join(self.log_path, self.test_id)
20+
expected_screenshot = os.path.join(test_logpath, "_1_screenshot.png")
21+
self.assert_true(os.path.exists(expected_screenshot))
22+
print('\n"%s" was saved!' % (expected_screenshot))
23+
24+
self.open("https://seleniumbase.io/tinymce/")
25+
self.save_screenshot_to_logs()
26+
expected_screenshot = os.path.join(test_logpath, "_2_screenshot.png")
27+
self.assert_true(os.path.exists(expected_screenshot))
28+
print('"%s" was saved!' % (expected_screenshot))
29+
30+
self.open("https://seleniumbase.io/error_page/")
31+
self.save_screenshot_to_logs("error_page")
32+
expected_screenshot = os.path.join(test_logpath, "_3_error_page.png")
33+
self.assert_true(os.path.exists(expected_screenshot))
34+
print('"%s" was saved!' % (expected_screenshot))
35+
36+
self.open("https://seleniumbase.io/devices/")
37+
self.save_screenshot_to_logs("devices")
38+
expected_screenshot = os.path.join(test_logpath, "_4_devices.png")
39+
self.assert_true(os.path.exists(expected_screenshot))
40+
print('"%s" was saved!' % (expected_screenshot))

examples/upload_file_test.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
""" Testing the self.choose_file() method. """
1+
""" Testing the self.choose_file() and self.assert_attribute() methods. """
22

33
import os
44
from seleniumbase import BaseCase
@@ -11,11 +11,13 @@ def test_file_upload_button(self):
1111
"?filename=tryjsref_fileupload_get")
1212
self.ad_block()
1313
self.switch_to_frame('iframeResult')
14-
zoom_in = 'input[type="file"]{zoom: 1.5;-moz-transform: scale(1.5);}'
14+
zoom_in = 'input[type="file"]{zoom: 1.6;-moz-transform: scale(1.6);}'
1515
self.add_css_style(zoom_in)
1616
self.highlight('input[type="file"]')
1717
dir_name = os.path.dirname(os.path.abspath(__file__))
18-
file_path = os.path.join(dir_name, "example_logs/screenshot.png")
18+
my_file = "screenshot.png"
19+
file_path = os.path.join(dir_name, "example_logs/%s" % my_file)
20+
self.assert_attribute("#myFile", "value", "")
1921
self.choose_file('input[type="file"]', file_path)
20-
self.demo_mode = True # Adds highlighting to the assert statement
21-
self.assert_element('input[type="file"]')
22+
self.assert_attribute("#myFile", "value", "C:\\fakepath\\%s" % my_file)
23+
self.highlight('input[type="file"]')

help_docs/method_summary.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,8 @@ self.switch_to_default_driver()
205205

206206
self.save_screenshot(name, folder=None)
207207

208+
self.save_screenshot_to_logs(name=None)
209+
208210
self.save_page_source(name, folder=None)
209211

210212
self.save_cookies(name="cookies.txt")
@@ -334,6 +336,12 @@ self.assert_not_equal(first, second, msg=None)
334336

335337
self.assert_raises(*args, **kwargs)
336338

339+
self.wait_for_attribute(selector, attribute, value=None,
340+
by=By.CSS_SELECTOR, timeout=None)
341+
342+
self.assert_attribute(selector, attribute, value=None,
343+
by=By.CSS_SELECTOR, timeout=None)
344+
337345
self.assert_title(title)
338346

339347
self.assert_no_js_errors()
@@ -342,6 +350,12 @@ self.inspect_html()
342350

343351
self.is_chromium()
344352

353+
self.get_chrome_version()
354+
355+
self.get_chromedriver_version()
356+
357+
self.is_chromedriver_too_old()
358+
345359
self.get_google_auth_password(totp_key=None)
346360

347361
self.convert_css_to_xpath(css)

0 commit comments

Comments
 (0)