def browser(request, browser_config): caps = {} caps.update(browser_config) build_tag = "nerodia-build" username = environ.get('SAUCE_USERNAME', None) access_key = environ.get('SAUCE_ACCESS_KEY', None) selenium_endpoint = "http://ondemand.saucelabs.com/wd/hub" caps['username'] = username caps['accesskey'] = access_key caps['name'] = request.node.name caps['build'] = build_tag executor = RemoteConnection(selenium_endpoint, resolve_ip=False) remote = webdriver.Remote(command_executor=executor, desired_capabilities=caps) browser = Browser(browser=remote, desired_capabilities=caps) yield browser sauce_result = "failed" if request.node.rep_call.failed else "passed" browser.execute_script("sauce:job-result={}".format(sauce_result)) browser.quit()
def test_can_pass_port(self, mocker, driver): mock = mocker.patch('selenium.webdriver.remote.webdriver.WebDriver') port = 5678 Browser(driver, port=port) mock.assert_called_once() assert mock.call_args_list[0][1].get('command_executor') == \ Capabilities.DEFAULT_URL.format(port)
def test_can_pass_url(self, mocker, driver): from selenium.webdriver import DesiredCapabilities name = driver.upper() if driver != 'ie' else 'INTERNETEXPLORER' caps = getattr(DesiredCapabilities, name) mock = mocker.patch('selenium.webdriver.remote.webdriver.WebDriver') Browser(driver, url='spam') mock.assert_called_once() assert mock.call_args_list[0][1].get('command_executor') == 'spam' assert mock.call_args_list[0][1]['desired_capabilities'].get('browserName') == \ caps['browserName']
def test_raises_correct_exception_when_trying_to_interact_with_a_closed_browser( self, bkwargs, page): from nerodia.browser import Browser from nerodia.exception import Error with pytest.raises(Error) as e: b = Browser(**bkwargs) b.goto(page.url('definition_lists.html')) b.close() b.dl(id='experience-list').id assert e.value.args[0] == 'browser was closed'
def selenium_browser_chrome(context): # -- HINT: @behave.fixture is similar to @contextlib.contextmanager context.browser = Browser(browser='chrome', options={ 'headless': True, 'no-sandbox': True }) yield context.browser # -- CLEANUP-FIXTURE PART: context.browser.close()
def test_passes_capabilities_to_selenium(self, browser_manager): browser_name = browser_manager.name caps_name = 'internetexplorer' if browser_name == 'ie' else browser_name caps = getattr(DesiredCapabilities, caps_name.upper()).copy() caps.update({'acceptInsecureCerts': True}) browser = Browser(browser_name, desired_capabilities=caps) insecure = browser.wd.capabilities['acceptInsecureCerts'] browser.quit() assert insecure is True
def basicSearch(): # Retirado do Site do Nerodia, para teste inicial # browser = Browser(browser='chrome') browser.goto('google.com') search_input = browser.text_field(title='Pesquisar') search_input.value = 'nerodia' browser.button(value='Pesquisa Google').click() browser.close()
def test_takes_listener_as_argument(self, browser_manager): from selenium.webdriver.support.abstract_event_listener import AbstractEventListener from selenium.webdriver.support.event_firing_webdriver import EventFiringWebDriver ael = AbstractEventListener() new_browser = None try: new_browser = Browser(**dict(browser_manager.kwargs, listener=ael)) assert isinstance(new_browser.wd, EventFiringWebDriver) finally: if new_browser: new_browser.quit()
def test_remote_when_passed_url_arg(self, browser, browser_manager): from selenium.webdriver.remote.webdriver import RemoteConnection, WebDriver caps_name = 'internetexplorer' if browser.name == 'internet explorer' else browser.name caps = getattr(DesiredCapabilities, caps_name.upper()).copy() browser = Browser(browser_manager.name, desired_capabilities=caps) driver = browser.wd executor = driver.command_executor browser.quit() assert driver.__class__.__name__ == WebDriver.__name__ assert driver.name == caps.get('browserName') assert isinstance(executor, RemoteConnection)
def launch_Kraken(): # Example # - https://www.programcreek.com/python/example/100026/selenium.webdriver.FirefoxProfile # Firefox profiles # - # Firefox options # - https://www.selenium.dev/selenium/docs/api/py/webdriver_firefox/selenium.webdriver.firefox.options.html from inspect import getsourcefile from os.path import abspath pathToHere = abspath(getsourcefile(lambda:0)) ### 1 Create Firefox Profile instance and Options instance ffprofile = webdriver.FirefoxProfile() options = webdriver.firefox.options.Options() # Set the download location ffprofile.set_preference('browser.download.dir', pathToHere) # Disable native events ( vs synthesized events) # Always set as False to prevent certain problems ffprofile.set_preference('webdriver_enable_native_events', False) # Location of Browser executable options.binary_location = "/Applications/Firefox-Dev.app/Contents/MacOS/firefox" # Run headless / no interface #options.add_argument('--headless') # Ignore HTTPs certificate errors options.add_argument('--ignore-certificate-errors') driver = webdriver.Firefox(firefox_profile=ffprofile, firefox_options=options) driver.implicitly_wait(30) #driver.maximize_window() ### 2 Create Nerodia session browserSession = Browser(driver) try: # Launch the website browserSession.goto( API_ENDPOINT ) return browserSession except: logging.exception("!!! Unable to create Browser Session !!!") logging.exception(sys.exec_info())
def launch_Simple(): # Returns a BROWSER SESSION targetBrowser = 'Firefox' try: browserSession = Browser(browser=targetBrowser) browserSession.goto( API_ENDPOINT ) return browserSession except: logging.exception("!!! Unable to create Browser Session !!!") logging.exception(sys.exec_info())
def test_accepts_firefox_profile(self, browser_manager, webserver): from selenium.webdriver.firefox.firefox_profile import FirefoxProfile home_page = webserver.path_for('special_chars.html') profile = FirefoxProfile() profile.set_preference('browser.startup.homepage', home_page) profile.set_preference('browser.startup.page', 1) kwargs = browser_manager.kwargs.copy() kwargs['options'] = {'profile': profile} new_browser = Browser(**kwargs) try: assert new_browser.url == home_page finally: new_browser.quit()
def main(site): "Get all redirect links to a series (still have to extract manually fromAndTo is an good option for this)" base = 'https://s.to' if base in site: site = site.replace(base, "") if not site[-1] == "/": site = site + "/" #print(base) #print(site) browser = Browser(browser='firefox') browser.goto(base + site) html = browser.html matches = re.findall( '<a (?:class="active" )?href="(' + site + r'staffel-\d+)" title="Staffel \d+">\d+</a>', html) #print(matches) episodeRegex = re.compile( r'<a href="(' + site + r'staffel-\d+/episode-\d+)" data-episode-id="\d*" title="Staffel \d+ Episode \d+" data-season-id="\d+">\d+</a>' ) allepisodes = list() for m in matches: browser.goto(base + m) html = browser.html episodes = episodeRegex.findall(html) allepisodes.extend(episodes) #print(allepisodes) VivoRegex = re.compile( r'<aclass="watchEpisode"itemprop="url"href="(/redirect/\d*)"target="_blank">\n<iclass="iconVivo"title="HosterVivo"></i>\n<h4>Vivo</h4>\n<divclass="hosterSiteVideoButton">Videoöffnen</div>' ) vivolinks = list() for e in allepisodes: browser.goto(base + e) html = browser.html html = html.replace(" ", "") vivolink = VivoRegex.findall(html) vivolinks.append(vivolink[0]) #print(vivolinks) for vl in vivolinks: print(base + vl) browser.close()
def run(): br = Browser(browser='chrome') br.goto("https://watir.com") # Check that "Titus" is somewhere in the page text assert "Watir" in br.text # Check "open source" is in the intro intro_text = br.div(class_name='intro').text assert "open source" in intro_text # Check that the page is correct via the URL br.link(text='Guides').click() assert 'watir.com/guides/' in br.url br.close()
def before_scenario(context, scenario): # We set our Guerrilla email. this is the temporary email service. context.email_session = GuerrillaMailSession() context.temp_email = context.email_session.get_session_state()['email_address'] # Start browser options = chrome_options() # options = firefox_options() options.add_argument("--start-maximized") options.add_argument("--incognito") options.add_argument("--private") # options.add_argument("--headless") # context.browser = webdriver.Edge() context.browser = Browser(browser='chrome', options=options) context.browser.window().maximize() # We create a dict to store the data of the fake user context.fake_user = dict() # Print which scenario we are about to test print(f'Starting test for {scenario.tags[0]}: {context.scenario.name}\n')
def browser(request): caps = { "browserName": "Chrome", "sauce:options": { "browserName": "Chrome", "platformName": "Windows 10", "browserVersion": "latest" } } username = os.environ['SAUCE_USERNAME'] access_key = os.environ['SAUCE_ACCESS_KEY'] remote_url = 'https://{}:{}@ondemand.saucelabs.com/wd/hub/'.format(username, access_key) remote = webdriver.Remote(command_executor=remote_url, desired_capabilities=caps) driver = Browser(browser=remote, desired_capabilities=caps) driver.goto(TEST_APP_URL) yield driver driver.quit()
def open_on_sauce(self): caps = { 'platformName': 'Windows 10', 'plaformVersion': 'latest', 'browserName': 'chrome' } username = environ.get('SAUCE_USERNAME', None) access_key = environ.get('SAUCE_ACCESS_KEY', None) selenium_endpoint = "http://ondemand.saucelabs.com/wd/hub" caps['username'] = username caps['accesskey'] = access_key caps['name'] = 'Robot Nerodia - Login' executor = RemoteConnection(selenium_endpoint, resolve_ip=False) remote = webdriver.Remote(command_executor=executor, desired_capabilities=caps) self.browser = Browser(browser=remote, desired_capabilities=caps)
def test_accepts_browser_options(self, browser_manager, mocker): from importlib import import_module browser_name = browser_manager.name module = import_module( 'selenium.webdriver.{}.options'.format(browser_name)) opts = module.Options() mock = mocker.patch( 'selenium.webdriver.{}.webdriver.WebDriver'.format(browser_name)) caps_name = 'internetexplorer' if browser_name == 'ie' else browser_name caps = getattr(DesiredCapabilities, caps_name.upper()).copy() browser = Browser(browser_name, options=opts) browser.quit() key = 'desired_capabilities' if browser_name in ['safari', 'chrome' ] else 'capabilities' kwargs = {} kwargs[key] = caps kwargs['options'] = opts mock.assert_called_once_with(**kwargs)
def test_takes_driver_instance_as_argument(self, browser): new_browser = Browser(browser.wd) assert new_browser.wd == browser.wd
from nerodia.browser import Browser import pandas as pd import time browser = Browser( 'chrome', headless=True ) # Set Headless to True so the physical GUI of Chrome doesn't have to be used ⚡️ browser.goto('https://www.premierleague.com/stats/top/players/goals?se=274' ) # Now use the browser to navigate to the EPL Stats Page time.sleep(5) # Allow data time to load into HTML goals = pd.read_html( browser.html )[0] # Use Pandas to fetch all the tables within the browser html, select the first table it finds ([0]) # When you've reached the end of the table, the Page Next button adds class 'inactive' to the page next element (div). Use browser tools to inspect the button on the last page to see for yourself. # As we know this, we can keep clicking the page next button and scraping the table until the button is inactive. In Python we can use while loop: while ((browser.div( class_name=["paginationBtn", "paginationNextContainer", "inactive"]) ).exists == False): browser.div( class_name=["paginationBtn", "paginationNextContainer"] ).fire_event( 'onClick' ) # fire onClick event on page next element. If it was a button element (not a div element), we could simply use .click() time.sleep(2) goals = goals.append( pd.read_html(browser.html)[0] ) # append the table from this page with the existing goals dataframe. print("Next Page")
#'--headless', ], 'desired_capabilities': { 'loggingPrefs': { 'browser': 'ALL' }, }, } if args.chrome_binary is not None: browser_opts['binary'] = args.chrome_binary if args.chrome_stdout is not None: # service_args processing requires patching nerodia.Capabilites._process_arguments() driver_opts['service_args'] = [ '--verbose', '--log-path={0}'.format(args.chrome_stdout) ] browser = Browser(browser='chrome', options=browser_opts, **driver_opts) #def at_exit_print_browser_output(browser): # print(browser.wd.get_log('browser'), file=sys.stderr) #atexit.register(at_exit_print_browser_output, browser) #DesiredCapabilities.CHROME['loggingPrefs'] = {'browser': 'ALL'} #print(driver.get_log('browser')) browser_pid = Process(browser.wd.service.process.pid).children()[0].pid print(browser_pid, flush=True, file=sys.stdout) def try_until_success(calls, exceptions_max=5): success = False exceptions = [] while not success:
def open_browser(self, name='chrome'): self.browser = Browser(browser=name)
def test_can_pass_executable_path(self, mocker, driver): mock = mocker.patch('selenium.webdriver.{}.webdriver.WebDriver'.format(driver)) Browser(driver, executable_path='spam') mock.assert_called_once() assert mock.call_args_list[0][1].get('executable_path') == 'spam'
def iniciaBot(): # Inicializacao do Bot # browser = Browser(browser='chrome') return browser
def test_works_even_if_browser_is_closed(self, browser, bkwargs): b = Browser(**bkwargs) b.close() repr(b)
from nerodia.browser import Browser br = Browser(browser="firefox") br.goto("https://www.w3schools.com/html/html_form_elements.asp") br.element(css="textarea[cols='30']").send_keys("hello world") br.element(css="textarea[cols='30']").send_keys([COMMAND + 't']) browser.close()
"""Basic script showing how Nerodia works.""" from nerodia.browser import Browser br = Browser(browser='firefox') br.goto("https://watir.com") # Check that "Titus" is somewhere in the page text assert "Watir" in br.text # Check "open source" is in the intro intro_text = br.div(class_name='intro').text assert "open source" in intro_text # Check that the page is correct via the URL br.link(text='Guides').click() assert 'watir.com/guides/' in br.url br.close()
from nerodia.browser import Browser import re from selenium import webdriver import json BASE = "https://herdt-campus.com" fp = webdriver.FirefoxProfile('/home/bf/.mozilla/firefox/a67xxtyb.auto') driver = webdriver.Firefox(fp) #browser = Browser(browser='firefox') browser = Browser(driver) browser.goto('https://bk-ostvest.lms.schulon.org/mod/url/view.php?id=16833') usrn = browser.text_field(name='username') usrn.value = '' pswd = browser.text_field(name='password') pswd.value = '' browser.button(value='Login').click() browser.button(value='Ich stimme zu!').click() katalog = re.findall( r'<a class="catalog-nav-link" href="(\/category\/herdt-themen\/[\w\/\- ]*)">[\w\/\- ]*<\/a>', browser.html) categorieDict = dict() for category in katalog:
def create(self): return Browser(**self.kwargs)
# Based on http://watir.com/guides/form-example/ from nerodia.browser import Browser from time import sleep # needed to perform sleep from faker import Faker # needed for fake form data import os # needed for file path # Setup browser = Browser(browser='chrome') browser.window().maximize() # Navigate to the Page browser.goto('a.testaddressbook.com') # Authenticate and Navigate to the Form browser.link(id='sign-in').click() browser.text_field(data_test='email').set('*****@*****.**') browser.text_field(data_test='password').set('password') browser.button(name='commit').click() browser.link(data_test='addresses').click() browser.link(data_test='create').click() # This uses the Faker Library to give us Random Data. # Read more about Faker Library here: https://pypi.org/project/Faker/ fake = Faker() # So we can use fake.name() instead of Faker().name() browser.text_field(id='address_first_name').set(fake.first_name()) browser.text_field(id='address_last_name').set(fake.last_name()) browser.text_field(id='address_street_address').set(fake.street_address()) browser.text_field(id='address_secondary_address').set( fake.secondary_address())