Best Python code snippet using SeleniumBase
jboptim.py
Source:jboptim.py
...21 return _html_files22def parse_html(html: str) -> BeautifulSoup:23 """Parse the HTML with Beautiful Soup"""24 return BeautifulSoup(html, features="html.parser")25def remove_elements(26 doc: BeautifulSoup, selector: str, attrs: Dict[str, Union[str, List[str]]]27) -> None:28 """Remove elements which match the selector"""29 elems = doc.find_all(selector, attrs)30 if len(elems) > 0:31 print(32 action_log(33 Fore.RED,34 "[REMOVING]",35 f"Found {len(elems)} matching {selector} [{attrs}]",36 )37 )38 for element in elems:39 element.decompose()40 else:41 print(42 action_log(43 Style.DIM,44 "[NO MATCH]",45 f"No elements found matching {selector} [{attrs}]",46 )47 )48def save_doc(doc: BeautifulSoup, dest: str) -> None:49 """Save a doc as an HTML"""50 print(action_log(Style.BRIGHT, "[SAVING]", f"Saving file to: {dest}", char="ââ"))51 text_file = open(dest, "w")52 _ = text_file.write(doc.prettify())53 text_file.close()54def append_to_head(doc: BeautifulSoup, html: str) -> None:55 """Append HTML string to head"""56 print(action_log(Fore.GREEN, "[APPEND]", "adding to head"))57 tag = BeautifulSoup(html, features="html.parser")58 if doc.head:59 doc.head.insert(0, tag)60def append_after_body(doc: BeautifulSoup, html: str) -> None:61 """Append after body"""62 print(action_log(Fore.GREEN, "[APPEND]", "adding after body"))63 tag = BeautifulSoup(html, features="html.parser")64 if doc.body:65 doc.body.insert(2, tag)66def append_buttons(doc: BeautifulSoup) -> None:67 """Add buttons"""68 elems = doc.find_all("div", {"class": "cell tag_hide-input docutils"})69 if len(elems) > 0:70 for element in elems:71 print(action_log(Fore.GREEN, "[APPEND]", "Adding hidden input button"))72 tag = BeautifulSoup(73 '<button class="input-toggle" onclick="hideButton(this)">show</button>',74 features="html.parser",75 )76 element.insert(1, tag)77def update_tag(78 doc: BeautifulSoup,79 selector: str,80 attrs: Dict[str, str],81 attr_to_change: str,82 value: str,83) -> None:84 """Update the value of a tag"""85 elems = doc.find_all(selector, attrs)86 if len(elems) > 0:87 print(88 action_log(89 Fore.YELLOW,90 "[UPDATE]",91 f"Updating {len(elems)} elements{Style.NORMAL} matching {selector} [{attrs}]",92 )93 )94 for element in elems:95 element.attrs[attr_to_change] = value96 else:97 print(98 action_log(99 Style.DIM,100 "[NO MATCH]",101 f"No elements found matching {selector} [{attrs}]",102 )103 )104def change_footer(doc: BeautifulSoup):105 """Remove container class from footer"""106 footer_inner = doc.select("footer > div.container")107 if len(footer_inner) > 0:108 footer_inner[0].attrs["class"] = ""109if __name__ == "__main__":110 parser: argparse.ArgumentParser = argparse.ArgumentParser(111 description="jboptim CLI utility.", prog="jboptim"112 )113 parser.add_argument(114 "--source",115 dest="source",116 action="store",117 help="Where to find the built HTML",118 )119 parser.add_argument(120 "--dest",121 dest="destination",122 action="store",123 help="Where to put the built HTML",124 )125 args: argparse.Namespace = parser.parse_args()126 html_files = get_html_files(args.source)127 init(autoreset=True) # start colour ouput128 for html_file in html_files:129 print(f"{Style.BRIGHT}Processing {html_file}")130 source = read_file(html_file)131 soup = parse_html(source)132 # remove index links133 remove_elements(soup, "link", {"rel": "index"})134 remove_elements(soup, "link", {"rel": "search"})135 remove_elements(soup, "link", {"rel": "next"})136 remove_elements(soup, "link", {"rel": "prev"})137 remove_elements(soup, "a", {"class": "colab-button"})138 remove_elements(soup, "a", {"class": "binder-button"})139 remove_elements(140 soup, "script", {"src": "https://unpkg.com/thebelab@latest/lib/index.js"}141 )142 remove_elements(143 soup, "script", {"src": "_static/js/index.3da636dd464baa7582d2.js"}144 )145 remove_elements(soup, "script", {"type": "text/x-thebe-config"})146 remove_elements(soup, "link", {"href": "_static/sphinx-thebe.css"})147 remove_elements(soup, "script", {"src": "_static/sphinx-thebe.js"})148 remove_elements(149 soup,150 "link",151 {"href": "_static/vendor/fontawesome/5.13.0/webfonts/fa-solid-900.woff2"},152 )153 remove_elements(154 soup, "link", {"href": "_static/vendor/open-sans_all/1.44.1/index.css"}155 )156 remove_elements(157 soup, "link", {"href": "_static/vendor/lato_latin-ext/1.44.1/index.css"}158 )159 remove_elements(160 soup,161 "link",162 {"href": "_static/css/index.73d71520a4ca3b99cfee5594769eaaae.css"},163 )164 remove_elements(165 soup,166 "link",167 {"href": "_static/vendor/fontawesome/5.13.0/webfonts/fa-brands-400.woff2"},168 )169 remove_elements(170 soup, "link", {"href": "_static/vendor/fontawesome/5.13.0/css/all.min.css"}171 )172 remove_elements(soup, "div", {"class": "dropdown-buttons-trigger"})173 remove_elements(soup, "a", {"data-tooltip": "Copy"})174 remove_elements(soup, "a", {"class": "copybtn"})175 remove_elements(soup, "link", {"href": "_static/copybutton.css"})176 remove_elements(soup, "script", {"src": "_static/copybutton.js"})177 remove_elements(soup, "script", {"src": "_static/clipboard.min.js"})178 remove_elements(soup, "link", {"href": "_static/pygments.css"})179 remove_elements(soup, "link", {"href": "_static/togglebutton.css"})180 remove_elements(soup, "form", {"action": "search.html"})181 remove_elements(182 soup,183 "div",184 {"class": ["col", "pl-2", "topbar-main"]},185 )186 remove_elements(187 soup,188 "link",189 {"href": "_static/sphinx-book-theme.40e2e510f6b7d1648584402491bb10fe.css"},190 )191 append_to_head(192 soup,193 '<link rel="preload" as="font" type="font/woff2"'194 + ' crossorigin="" href="/fonts/JuliaMono-Regular.woff2">',195 )196 append_to_head(197 soup,198 '<link rel="preload" as="font" type="font/woff"'199 + ' crossorigin="" href="_static/icomoon.woff">',200 )...
build.py
Source:build.py
...3from builder import BuildDirectory4copy_tree('src', 'dist')5build_live = BuildDirectory('dist')6build_live.remove_active_flows(os.path.join('.', 'dist/flows-live', 'flows'))7build_live.remove_elements(os.path.join('.', 'src', 'applications'), 'profileActionOverrides', 'profile', 'Minimum Access - Salesforce')8build_live.remove_elements(os.path.join('.', 'src', 'profiles'), 'userPermissions', 'name', 'ManageSandboxes')9build_live.remove_elements(os.path.join('.', 'src', 'profiles'), 'userPermissions', 'name', 'ManageReleaseUpdates')10build_live.remove_elements(os.path.join('.', 'src', 'profiles'), 'userPermissions', 'name', 'SkipIdentityConfirmation')11build_live.remove_elements(os.path.join('.', 'src', 'profiles'), 'userPermissions', 'name', 'ManageCssUsers')12build_live.remove_elements(os.path.join('.', 'src', 'profiles'), 'userPermissions', 'name', 'ManagePartners')...
test_remove_elements.py
Source:test_remove_elements.py
1from unittest import TestCase2from arrays import remove_elements3class Test(TestCase):4 def test_basic(self):5 self.assertEqual(3, remove_elements.basic([3, 2, 2, 3, 2, 3], 2))6 self.assertEqual(0, remove_elements.basic([], 2))7 self.assertEqual(1, remove_elements.basic([3], 2))8 self.assertEqual(0, remove_elements.basic([2, 2, 2, 2], 2))9 def test_sored(self):10 self.assertEqual(4, remove_elements.basic([1, 2, 2, 4, 4, 5], 2))11 self.assertEqual(0, remove_elements.basic([], 2))12 self.assertEqual(1, remove_elements.basic([3], 2))...
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!