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 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)
class Login(): def __init__(self): self.browser = {} @keyword def open_browser(self, name='chrome'): self.browser = Browser(browser=name) @keyword 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) @keyword def go_to_login(self): self.browser.goto(BASE_TEST_URL + "login") @keyword def login_as(self, username, password): self.browser.input(id='username').send_keys(username) self.browser.input(id='password').send_keys(password) self.browser.button(class_name='radius').click() @keyword def is_error_message_visible(self): assert self.browser.element(class_name='error').present @keyword def is_login_successful(self): assert self.browser.element(class_name='success').present @keyword def close_browser(self): self.browser.quit()
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 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 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 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 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 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 test_goes_to_the_given_url_and_return_an_instance_of_itself( self, page, bkwargs): from nerodia.browser import Browser browser = Browser.start(page.url('non_control_elements.html'), **bkwargs) assert isinstance(browser, Browser) assert browser.title == 'Non-control elements' browser.close()
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 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 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 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 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_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 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()
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 test_takes_driver_instance_as_argument(self, browser): new_browser = Browser(browser.wd) assert new_browser.wd == browser.wd
#'--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:
from nerodia.browser import Browser b = Browser(browser='chrome') b.goto("http://toolsqa.com/automation-practice-form/") print(b.title) uploadfile = "/Users/Kerrrlo/Downloads/Photos/boss.jpeg" b.file_field(id="photo").set(uploadfile)
from nerodia.browser import Browser browser = Browser(browser='chrome') browser.goto( 'http://wp.curve.in.th/wp-login.php?loggedout=true&wp_lang=en_US&jetpack-sso-show-default-form=1' ) t = browser.text_field(id='user_login') t.value = '**' t = browser.text_field(id='user_pass') t.value = '***' browser.button(id='wp-submit').click() browser.wait_until(timeout=2, interval=0.5, method=lambda e: e.title.startswith("Dashboard")) posts = [] for i in range(1, 6): browser.goto(f'http://wp.curve.in.th/wp-admin/edit.php?paged={i}') for t in browser.trs(class_name="type-post"): p = {} date = t.td(class_name="date").span().text date = date.replace("/", "-") p["date"] = date link = t.div(class_name="row-actions").span( class_name="view").link().href p["view_link"] = link p["name"] = link.replace("http://wp.curve.in.th/", "")
def test_works_even_if_browser_is_closed(self, browser, bkwargs): b = Browser(**bkwargs) b.close() repr(b)
# 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())
"""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()
#!/usr/bin/env python3 from nerodia.browser import Browser import re loginsite = "https://mggym-borken.lms.schulon.org/login/index.php" browser = Browser(browser='firefox') browser.goto(loginsite) usrn = browser.text_field(name="username") usrn.value = '' pswd = browser.text_field(name="password") pswd.value = '' browser.button(value='Login').click() html = browser.html #print(html:=browser.html) matches = re.findall( '<span.*>Meine Kurse<\/span>.*href="(https:\/\/mggym-borken.lms.schulon.org\/course\/view.php\?id=\d+)">.*href="(https:\/\/mggym-borken.lms.schulon.org\/course\/view.php\?id=\d+)">.*href="(https:\/\/mggym-borken.lms.schulon.org\/course\/view.php\?id=\d+)">', html) kurse = list(matches[0]) #print(kurse) for kurs in kurse: browser.goto(kurs) html = browser.html matches = re.findall( 'href="(https:\/\/mggym-borken\.lms\.schulon\.org\/mod\/resource\/view.php\?id=\d+)"><img src="https:\/\/mggym-borken\.lms\.schulon\.org\/theme\/image\.php\/classic\/core\/1587401819\/f\/pdf-24"', html) print(matches)
def create(self): return Browser(**self.kwargs)
from time import sleep REDIRECT_SLEEP_SEC = 2 def login(): username = '******' password = "" browser.link(text='Log In').click() sleep(REDIRECT_SLEEP_SEC) # require 'pry'; binding.pry browser.text_field(name='username').set(username) browser.text_field(name='password').set(password) browser.input(class_name='twikiSubmit').click() sleep(REDIRECT_SLEEP_SEC) my_link = browser.element(text="Cheng Ji") print(my_link.html) # if in the root: # from selenium.webdriver.chrome.options import Options # options = Options() # options.add_argument('--no-sandbox') # options.add_argument('--disable-dev-shm-usage') # options.add_argument('--headless') # options.add_argument('--disable-gpu') # browser = Browser(browser='chrome', options=options) browser = Browser(browser='chrome', headless=True) # cannot using with # with Browser(browser='chrome', headless=False) as browser: browser.goto("http://wiki.fortinet.com/twiki/bin/view") login() # browser.close()