Skip to content

Commit d0f1e55

Browse files
committed
Update the Fundamentals presentation
1 parent c067330 commit d0f1e55

File tree

1 file changed

+178
-3
lines changed

1 file changed

+178
-3
lines changed

examples/presenter/fundamentals.py

Lines changed: 178 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -203,15 +203,16 @@ def test_presentation(self):
203203
"<h4>What are some disadvantages of using <b>raw</b> Selenium "
204204
"without additional libraries or frameworks?</h4><hr />"
205205
"<h4>\n"
206-
"<br /><br /><br /><br /><br /><br /><br /><br /><br /><br />",
206+
"<br />",
207+
image="https://seleniumbase.io/other/sel_and_py_2.png",
207208
)
208209
self.add_slide(
209210
"<h4>What are some disadvantages of using <b>raw</b> Selenium "
210211
"without additional libraries or frameworks?</h4><hr />"
211212
"<h4>\n"
212213
"<mark>The default timeout is 0: If an element isn't immediately "
213214
"ready to be interacted with, you'll get errors when trying "
214-
"to interact with those elements.<mark>\n"
215+
"to interact with those elements.</mark>\n"
215216
"</h4>\n",
216217
image="https://seleniumbase.io/other/messy_stacktrace.png",
217218
)
@@ -254,6 +255,21 @@ def test_presentation(self):
254255
"<mark>A test framework can provide those!</mark>",
255256
image="https://seleniumbase.io/cdn/img/dash_report.png",
256257
)
258+
self.add_slide(
259+
"<h4>Raw Selenium disadvantages, continued...</h4><hr />\n"
260+
"<br />\n"
261+
"<p><mark>It takes multiple lines of code to do simple tasks:"
262+
"</mark></p>\n"
263+
"<pre>\n"
264+
'element = driver.find_element("css selector", "#password")\n'
265+
"element.clear()\n"
266+
'element.send_keys("secret_sauce")\n'
267+
'element.submit()\n'
268+
"</pre>\n"
269+
"<br />\n"
270+
"<p>But with a framework, do all that in ONE line:</p>\n"
271+
'<pre>self.type("#password", "secret_sauce\\n")</pre>'
272+
)
257273
self.add_slide(
258274
"<h4>Raw Selenium disadvantages, continued...</h4><hr />\n"
259275
"<br />\n"
@@ -265,7 +281,8 @@ def test_presentation(self):
265281
'element.submit()\n'
266282
"</pre>\n"
267283
"<br />\n"
268-
"<p>But with a framework:</p>\n"
284+
"<p><mark>But with a framework, do all that in ONE line:"
285+
"</mark></p>\n"
269286
'<pre>self.type("#password", "secret_sauce\\n")</pre>'
270287
)
271288
self.add_slide(
@@ -329,6 +346,164 @@ def test_presentation(self):
329346
"<h3><code><mark>pip install seleniumbase</mark></code></h3>",
330347
image="https://seleniumbase.io/other/seleniumbase_github.png",
331348
)
349+
self.add_slide(
350+
"<h3>SeleniumBase example test:</h3><hr />",
351+
code=(
352+
"from seleniumbase import BaseCase\n"
353+
"BaseCase.main(__name__, __file__)\n\n"
354+
"class MyTestClass(BaseCase):\n"
355+
" def test_basics(self):\n"
356+
' self.open("https://www.saucedemo.com")\n'
357+
' self.type("#user-name", "standard_user")\n'
358+
' self.type("#password", "secret_sauce\\n")\n'
359+
' self.assert_element("div.inventory_list")\n'
360+
' self.assert_exact_text("Products", "span.title")\n'
361+
" self.click('button[name*=\"backpack\"]')\n"
362+
' self.click("#shopping_cart_container a")\n'
363+
' self.assert_exact_text("Your Cart", "span.title")\n'
364+
' self.assert_text("Backpack", "div.cart_item")\n'
365+
' self.click("button#checkout")\n'
366+
' self.type("#first-name", "SeleniumBase")\n'
367+
' self.type("#last-name", "Automation")\n'
368+
' self.type("#postal-code", "77123")\n'
369+
' self.click("input#continue")\n'
370+
' self.assert_text("Checkout: Overview")'
371+
),
372+
)
373+
self.add_slide(
374+
"<h3>Common SeleniumBase methods:</h3><hr />",
375+
code=(
376+
"self.open(url) # Navigate the browser window to the URL.\n"
377+
"self.type(selector, text) # Update field with the text.\n"
378+
"self.click(selector) # Click element with the selector.\n"
379+
"self.click_link(link_text) # Click link containing text.\n"
380+
"self.check_if_unchecked(selector) # Check checkbox.\n"
381+
"self.uncheck_if_checked(selector) # Uncheck checkbox.\n"
382+
"self.select_option_by_text(dropdown_selector, option)\n"
383+
"self.hover_and_click(hover_selector, click_selector)\n"
384+
"self.drag_and_drop(drag_selector, drop_selector)\n"
385+
"self.choose_file(selector, file_path) # Upload a file.\n"
386+
"self.switch_to_frame(frame) # Switch into the iframe.\n"
387+
"self.switch_to_default_content() # Exit all iframes.\n"
388+
"self.switch_to_parent_frame() # Exit current iframe.\n"
389+
"self.open_new_window() # Open new window in same browser.\n"
390+
"self.switch_to_window(window) # Switch to browser window.\n"
391+
"self.switch_to_default_window() # Go to original window.\n"
392+
"self.assert_element(selector) # Verify element is visible.\n"
393+
"self.assert_text(text, selector) # Verify text substring.\n"
394+
"self.assert_exact_text(text, selector) # Verify exact text."
395+
),
396+
)
397+
self.add_slide(
398+
"<h3>Common command-line options:</h3><hr />"
399+
"<pre>\n"
400+
'<span class="kwd">--browser=BROWSER</span>'
401+
'<span class="str">'
402+
' (Choose web browser. Default: "chrome".)'
403+
'</span>\n'
404+
'<span class="kwd">--edge / --firefox / --safari</span>'
405+
'<span class="str">'
406+
' (Browser Shortcut.)'
407+
'</span>\n'
408+
'<span class="kwd">--headless</span>'
409+
'<span class="str">'
410+
' (Run tests headlessly. Default on Linux OS.)'
411+
'</span>\n'
412+
'<span class="kwd">--demo</span>'
413+
'<span class="str">'
414+
' (Slow down and see test actions as they occur.)'
415+
'</span>\n'
416+
'<span class="kwd">--slow</span>'
417+
'<span class="str">'
418+
' (Slow down the automation. Faster than Demo Mode.)'
419+
'</span>\n'
420+
'<span class="kwd">--reuse-session / --rs</span>'
421+
'<span class="str">'
422+
' (Reuse browser session for tests.)'
423+
'</span>\n'
424+
'<span class="kwd">--reuse-class-session / --rcs</span>'
425+
'<span class="str">'
426+
' (RS, but for class tests.)'
427+
'</span>\n'
428+
'<span class="kwd">--crumbs</span>'
429+
'<span class="str">'
430+
' (Clear cookies between tests reusing a session.)'
431+
'</span>\n'
432+
'<span class="kwd">--maximize</span>'
433+
'<span class="str">'
434+
' (Start tests with the web browser maximized.)'
435+
'</span>\n'
436+
'<span class="kwd">--dashboard</span>'
437+
'<span class="str">'
438+
' (Enable the SB Dashboard at dashboard.html)'
439+
'</span>\n'
440+
'<span class="kwd">--uc</span>'
441+
'<span class="str">'
442+
' (Enable undetected-chromedriver mode.)'
443+
'</span>\n'
444+
'<span class="kwd">--incognito</span>'
445+
'<span class="str">'
446+
' (Enable Incognito mode.)'
447+
'</span>\n'
448+
'<span class="kwd">--guest</span>'
449+
'<span class="str">'
450+
' (Enable Guest mode.)'
451+
'</span>\n'
452+
'<span class="kwd">-m=MARKER</span>'
453+
'<span class="str">'
454+
' (Run tests with the specified pytest marker.)'
455+
'</span>\n'
456+
'<span class="kwd">-n=NUM</span>'
457+
'<span class="str">'
458+
' (Multithread the tests using that many threads.)'
459+
'</span>\n'
460+
'<span class="kwd">-v</span>'
461+
'<span class="str">'
462+
' (Verbose mode. Print the full names of each test run.)'
463+
'</span>\n'
464+
'<span class="kwd">--html=report.html</span>'
465+
'<span class="str">'
466+
' (Create a detailed pytest-html report.)'
467+
'</span>\n'
468+
'<span class="kwd">--collect-only / --co</span>'
469+
'<span class="str">'
470+
' (Only show discovered tests. No run.)'
471+
'</span>\n'
472+
'<span class="kwd">--co -q</span>'
473+
'<span class="str">'
474+
' (Only show full names of discovered tests. No run.)'
475+
'</span>\n'
476+
'<span class="kwd">-x</span>'
477+
'<span class="str">'
478+
' (Stop running tests after the first failure is reached.)'
479+
'</span>\n'
480+
"</pre>"
481+
)
482+
self.add_slide(
483+
"<h3>Common console scripts:</h3><hr />",
484+
code=(
485+
"seleniumbase get [DRIVER] [OPTIONS] # Eg. chromedriver\n"
486+
"seleniumbase methods # List common Python methods\n"
487+
"seleniumbase options # List common pytest options\n"
488+
"seleniumbase gui # Open the SB GUI for pytest\n"
489+
"seleniumbase caseplans # Open the SB Case Plans App\n"
490+
"seleniumbase mkdir [DIRECTORY] # Create a test directory\n"
491+
"seleniumbase mkfile [FILE.py] # Create a test file\n"
492+
"seleniumbase codegen [FILE.py] [OPTIONS] # Record a test\n"
493+
"seleniumbase recorder # Open the SB Recorder App\n"
494+
"seleniumbase mkpres # Create a Presentation boilerplate\n"
495+
"seleniumbase mkchart # Create a Chart boilerplate\n"
496+
"seleniumbase print [FILE] # Print file to console\n"
497+
"seleniumbase translate [FILE.py] [OPTIONS] # Translate\n"
498+
"seleniumbase extract-objects [SB_FILE.py] # Get objects\n"
499+
"seleniumbase inject-objects [SB_FILE.py] # Swap selectors\n"
500+
"seleniumbase objectify [SB_FILE.py] # Get & swap objects\n"
501+
"seleniumbase revert-objects [SB_FILE.py] # Undo objectify\n"
502+
"seleniumbase download server # Get Selenium Grid JAR file\n"
503+
"seleniumbase grid-hub [start|stop] [OPTIONS] # Start Grid\n"
504+
"seleniumbase grid-node [start|stop] --hub=[IP] # Add Node"
505+
),
506+
)
332507
self.add_slide(
333508
"<h2><b>Live Demo Time!</b></h2><hr /><br />"
334509
"<h3>(Starting with raw Selenium, and evolving that into "

0 commit comments

Comments
 (0)