Skip to content

Commit 00f21a1

Browse files
authored
Merge pull request #912 from seleniumbase/firefox-options-and-preferences
Add options to set custom Firefox args and preferences
2 parents 91ca4a2 + 67b68f7 commit 00f21a1

File tree

16 files changed

+244
-67
lines changed

16 files changed

+244
-67
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,8 @@ The code above will leave your browser window open in case there's a failure. (i
359359
--mobile # (Use the mobile device emulator while running tests.)
360360
--metrics=STRING # (Set mobile metrics: "CSSWidth,CSSHeight,PixelRatio".)
361361
--chromium-arg=ARG # (Add a Chromium arg for Chrome/Edge, comma-separated.)
362+
--firefox-arg=ARG # (Add a Firefox arg for Firefox, comma-separated.)
363+
--firefox-pref=SET # (Set a Firefox preference:value set, comma-separated.)
362364
--extension-zip=ZIP # (Load a Chrome Extension .zip|.crx, comma-separated.)
363365
--extension-dir=DIR # (Load a Chrome Extension directory, comma-separated.)
364366
--headless # (Run tests headlessly. Default mode on Linux OS.)

docs/requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Markdown==3.3.4;python_version>="3.6"
66
MarkupSafe==2.0.1;python_version>="3.6"
77
docutils==0.17.1
88
Jinja2==3.0.1;python_version>="3.6"
9-
click==8.0.0
9+
click==8.0.1
1010
readme-renderer==29.0
1111
pymdown-extensions==8.2
1212
importlib-metadata==4.0.1;python_version>="3.6"

examples/ReadMe.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,8 @@ Run an example test using a nosetest configuration file:
153153
nosetests my_first_test.py --config=example_config.cfg
154154
```
155155

156+
--------
157+
156158
For more advanced run commands, such as using a proxy server, see [../help_docs/customizing_test_runs.md](https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/customizing_test_runs.md)
157159

158160
--------

examples/raw_parameter_script.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@
8383
sb.settings_file = None
8484
sb.user_data_dir = None
8585
sb.chromium_arg = None
86+
sb.firefox_arg = None
87+
sb.firefox_pref = None
8688
sb.proxy_string = None
8789
sb.swiftshader = False
8890
sb.ad_block_on = False

examples/test_shadow_dom.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
This uses the "::shadow" selector for piercing shadow-root elements.
55
Here's the URL that contains Shadow DOM: chrome://downloads/ """
66

7-
87
from seleniumbase import BaseCase
98

109

help_docs/customizing_test_runs.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,8 @@ SeleniumBase provides additional ``pytest`` command-line options for tests:
114114
--mobile # (Use the mobile device emulator while running tests.)
115115
--metrics=STRING # (Set mobile metrics: "CSSWidth,CSSHeight,PixelRatio".)
116116
--chromium-arg=ARG # (Add a Chromium arg for Chrome/Edge, comma-separated.)
117+
--firefox-arg=ARG # (Add a Firefox arg for Firefox, comma-separated.)
118+
--firefox-pref=SET # (Set a Firefox preference:value set, comma-separated.)
117119
--extension-zip=ZIP # (Load a Chrome Extension .zip|.crx, comma-separated.)
118120
--extension-dir=DIR # (Load a Chrome Extension directory, comma-separated.)
119121
--headless # (Run tests headlessly. Default mode on Linux OS.)

help_docs/method_summary.md

Lines changed: 81 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,9 @@ self.click_partial_link(partial_link_text, timeout=None)
9090

9191
self.get_text(selector, by=By.CSS_SELECTOR, timeout=None)
9292

93-
self.get_attribute(selector, attribute, by=By.CSS_SELECTOR, timeout=None, hard_fail=True)
93+
self.get_attribute(
94+
selector, attribute, by=By.CSS_SELECTOR,
95+
timeout=None, hard_fail=True)
9496

9597
self.set_attribute(selector, attribute, value, by=By.CSS_SELECTOR, timeout=None)
9698

@@ -130,31 +132,37 @@ self.switch_to_frame_of_element(selector, by=By.CSS_SELECTOR)
130132

131133
self.hover_on_element(selector, by=By.CSS_SELECTOR)
132134

133-
self.hover_and_click(hover_selector, click_selector,
134-
hover_by=By.CSS_SELECTOR, click_by=By.CSS_SELECTOR,
135-
timeout=None)
135+
self.hover_and_click(
136+
hover_selector, click_selector,
137+
hover_by=By.CSS_SELECTOR, click_by=By.CSS_SELECTOR,
138+
timeout=None)
136139

137-
self.hover_and_double_click(hover_selector, click_selector,
138-
hover_by=By.CSS_SELECTOR, click_by=By.CSS_SELECTOR,
139-
timeout=None)
140+
self.hover_and_double_click(
141+
hover_selector, click_selector,
142+
hover_by=By.CSS_SELECTOR, click_by=By.CSS_SELECTOR,
143+
timeout=None)
140144

141145
self.drag_and_drop(drag_selector, drop_selector,
142146
drag_by=By.CSS_SELECTOR, drop_by=By.CSS_SELECTOR,
143147
timeout=None)
144148

145-
self.drag_and_drop_with_offset(selector, x, y, by=By.CSS_SELECTOR, timeout=None)
149+
self.drag_and_drop_with_offset(
150+
selector, x, y, by=By.CSS_SELECTOR, timeout=None)
146151

147-
self.select_option_by_text(dropdown_selector, option,
148-
dropdown_by=By.CSS_SELECTOR,
149-
timeout=None)
152+
self.select_option_by_text(
153+
dropdown_selector, option,
154+
dropdown_by=By.CSS_SELECTOR,
155+
timeout=None)
150156

151-
self.select_option_by_index(dropdown_selector, option,
152-
dropdown_by=By.CSS_SELECTOR,
153-
timeout=None)
157+
self.select_option_by_index(
158+
dropdown_selector, option,
159+
dropdown_by=By.CSS_SELECTOR,
160+
timeout=None)
154161

155-
self.select_option_by_value(dropdown_selector, option,
156-
dropdown_by=By.CSS_SELECTOR,
157-
timeout=None)
162+
self.select_option_by_value(
163+
dropdown_selector, option,
164+
dropdown_by=By.CSS_SELECTOR,
165+
timeout=None)
158166

159167
self.load_html_string(html_string, new_page=True)
160168

@@ -188,16 +196,17 @@ self.switch_to_default_window()
188196

189197
self.switch_to_newest_window()
190198

191-
self.get_new_driver(browser=None, headless=None, locale_code=None,
192-
servername=None, port=None, proxy=None, agent=None,
193-
switch_to=True, cap_file=None, cap_string=None,
194-
disable_csp=None, enable_ws=None, enable_sync=None,
195-
use_auto_ext=None, no_sandbox=None, disable_gpu=None,
196-
incognito=None, guest_mode=None,
197-
devtools=None, remote_debug=None,
198-
swiftshader=None, block_images=None, user_data_dir=None,
199-
extension_zip=None, extension_dir=None, is_mobile=False,
200-
d_width=None, d_height=None, d_p_r=None)
199+
self.get_new_driver(
200+
browser=None, headless=None, locale_code=None,
201+
servername=None, port=None, proxy=None, agent=None,
202+
switch_to=True, cap_file=None, cap_string=None,
203+
disable_csp=None, enable_ws=None, enable_sync=None,
204+
use_auto_ext=None, no_sandbox=None, disable_gpu=None,
205+
incognito=None, guest_mode=None,
206+
devtools=None, remote_debug=None,
207+
swiftshader=None, block_images=None, user_data_dir=None,
208+
extension_zip=None, extension_dir=None, is_mobile=None,
209+
d_width=None, d_height=None, d_p_r=None)
201210

202211
self.switch_to_driver(driver)
203212

@@ -236,7 +245,8 @@ self.bring_to_front(selector, by=By.CSS_SELECTOR)
236245

237246
self.highlight_click(selector, by=By.CSS_SELECTOR, loops=3, scroll=True)
238247

239-
self.highlight_update_text(selector, text, by=By.CSS_SELECTOR, loops=3, scroll=True)
248+
self.highlight_update_text(
249+
selector, text, by=By.CSS_SELECTOR, loops=3, scroll=True)
240250

241251
self.highlight(selector, by=By.CSS_SELECTOR, loops=4, scroll=True)
242252

@@ -296,17 +306,20 @@ self.assert_no_404_errors(multithreaded=True)
296306

297307
self.print_unique_links_with_status_codes()
298308

299-
self.get_pdf_text(pdf, page=None, maxpages=None, password=None,
300-
codec='utf-8', wrap=False, nav=False, override=False)
309+
self.get_pdf_text(
310+
pdf, page=None, maxpages=None, password=None,
311+
codec='utf-8', wrap=False, nav=False, override=False)
301312

302-
self.assert_pdf_text(pdf, text, page=None, maxpages=None, password=None,
303-
codec='utf-8', wrap=True, nav=False, override=False)
313+
self.assert_pdf_text(
314+
pdf, text, page=None, maxpages=None, password=None,
315+
codec='utf-8', wrap=True, nav=False, override=False)
304316

305317
self.create_folder(folder)
306318

307319
self.choose_file(selector, file_path, by=By.CSS_SELECTOR, timeout=None)
308320

309-
self.save_element_as_image_file(selector, file_name, folder=None, overlay_text="")
321+
self.save_element_as_image_file(
322+
selector, file_name, folder=None, overlay_text="")
310323

311324
self.download_file(file_url, destination_folder=None)
312325

@@ -337,11 +350,13 @@ self.assert_not_equal(first, second, msg=None)
337350

338351
self.assert_raises(*args, **kwargs)
339352

340-
self.wait_for_attribute(selector, attribute, value=None,
341-
by=By.CSS_SELECTOR, timeout=None)
353+
self.wait_for_attribute(
354+
selector, attribute, value=None,
355+
by=By.CSS_SELECTOR, timeout=None)
342356

343-
self.assert_attribute(selector, attribute, value=None,
344-
by=By.CSS_SELECTOR, timeout=None)
357+
self.assert_attribute(
358+
selector, attribute, value=None,
359+
by=By.CSS_SELECTOR, timeout=None)
345360

346361
self.assert_title(title)
347362

@@ -425,34 +440,42 @@ self.add_meta_tag(http_equiv=None, content=None)
425440

426441
self.create_presentation(name=None, theme="default", transition="default")
427442

428-
self.add_slide(content=None, image=None, code=None, iframe=None,
429-
content2=None, notes=None, transition=None, name=None)
443+
self.add_slide(
444+
content=None, image=None, code=None, iframe=None,
445+
content2=None, notes=None, transition=None, name=None)
430446

431-
self.save_presentation(name=None, filename=None, show_notes=False, interval=0)
447+
self.save_presentation(
448+
name=None, filename=None, show_notes=False, interval=0)
432449

433-
self.begin_presentation(name=None, filename=None, show_notes=False, interval=0)
450+
self.begin_presentation(
451+
name=None, filename=None, show_notes=False, interval=0)
434452

435453
############
436454

437-
self.create_pie_chart(chart_name=None, title=None, subtitle=None,
438-
data_name=None, unit=None, libs=True,
439-
labels=True, legend=True)
455+
self.create_pie_chart(
456+
chart_name=None, title=None, subtitle=None,
457+
data_name=None, unit=None, libs=True,
458+
labels=True, legend=True)
440459

441-
self.create_bar_chart(chart_name=None, title=None, subtitle=None,
442-
data_name=None, unit=None, libs=True,
443-
labels=True, legend=True)
460+
self.create_bar_chart(
461+
chart_name=None, title=None, subtitle=None,
462+
data_name=None, unit=None, libs=True,
463+
labels=True, legend=True)
444464

445-
self.create_column_chart(chart_name=None, title=None, subtitle=None,
446-
data_name=None, unit=None, libs=True,
447-
labels=True, legend=True)
465+
self.create_column_chart(
466+
chart_name=None, title=None, subtitle=None,
467+
data_name=None, unit=None, libs=True,
468+
labels=True, legend=True)
448469

449-
self.create_line_chart(chart_name=None, title=None, subtitle=None,
450-
data_name=None, unit=None, zero=False, libs=True,
451-
labels=True, legend=True)
470+
self.create_line_chart(
471+
chart_name=None, title=None, subtitle=None,
472+
data_name=None, unit=None, zero=False, libs=True,
473+
labels=True, legend=True)
452474

453-
self.create_area_chart(chart_name=None, title=None, subtitle=None,
454-
data_name=None, unit=None, zero=False, libs=True,
455-
labels=True, legend=True)
475+
self.create_area_chart(
476+
chart_name=None, title=None, subtitle=None,
477+
data_name=None, unit=None, zero=False, libs=True,
478+
labels=True, legend=True)
456479

457480
self.add_series_to_chart(data_name=None, chart_name=None)
458481

@@ -535,7 +558,8 @@ self.find_text(text, selector="html", by=By.CSS_SELECTOR, timeout=None)
535558
# Duplicates: self.wait_for_text(text, selector="html", by=By.CSS_SELECTOR, timeout=None)
536559
# self.wait_for_text_visible(text, selector="html", by=By.CSS_SELECTOR, timeout=None)
537560

538-
self.wait_for_exact_text_visible(text, selector="html", by=By.CSS_SELECTOR, timeout=None)
561+
self.wait_for_exact_text_visible(
562+
text, selector="html", by=By.CSS_SELECTOR, timeout=None)
539563

540564
self.assert_text(text, selector="html", by=By.CSS_SELECTOR, timeout=None)
541565
# Duplicates: self.assert_text_visible(text, selector="html", by=By.CSS_SELECTOR, timeout=None)

integrations/node_js/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<html>
22
<head>
3-
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" crossorigin="anonymous">
3+
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.6.0/css/bootstrap.min.css" crossorigin="anonymous">
44
<style>
55
body {font-family: Arial, Helvetica, sans-serif;}
66
h1 {color:#3366CC; font-size: 32px;}

requirements.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ requests==2.25.1
2828
selenium==3.141.0
2929
msedge-selenium-tools==3.141.3
3030
more-itertools==5.0.0;python_version<"3.5"
31-
more-itertools==8.7.0;python_version>="3.5"
31+
more-itertools==8.8.0;python_version>="3.5"
3232
cssselect==1.1.0
3333
filelock==3.0.12
3434
fasteners==0.16
@@ -84,7 +84,7 @@ toml==0.10.2
8484
Pillow==6.2.2;python_version<"3.5"
8585
Pillow==7.2.0;python_version>="3.5" and python_version<"3.6"
8686
Pillow==8.2.0;python_version>="3.6"
87-
rich==10.2.1;python_version>="3.6" and python_version<"4.0"
87+
rich==10.2.2;python_version>="3.6" and python_version<"4.0"
8888
tornado==5.1.1;python_version<"3.5"
8989
tornado==6.1;python_version>="3.5"
9090
pdfminer.six==20191110;python_version<"3.5"

seleniumbase/__version__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
# seleniumbase package
2-
__version__ = "1.63.7"
2+
__version__ = "1.63.8"

0 commit comments

Comments
 (0)