Exemple #1
0
    def click_link(self, link_type='card', index=0):
        """link_type: 'card', or 'learn_more'.  Index: 0, 1, 2"""

        # card or learn more link?
        if link_type.lower() == 'card':
            l = self.cards
        else:
            l = self.learn_more

        try:
            el = l[int(index)]
        except IndexError:
            raise Exception('Invalid card index')

        # make sure element is in view
        if not main.is_desktop():
            el_bottom = self.get_el_location(el, 'bottom')
            window_height = self.get_window_height()
            scroll_distance = el_bottom - window_height
            self.move('down', scroll_distance)

        # make sure menu is closed on desktop
        if not main.is_desktop():
            self.menu.close()
        self.nav.click_el(el)
	def test_landing_pages(self):
		""" test_menu.py:TestRoleSwitching.test_landing_pages """
		# Changing roles should land on expected pages
		# Employer default: 'employee' page (should eventually get lobby page)
		# Employee default: 'account' page
		lobby_page = self.nicol.lobby_page
		ps_page = self.nicol.ps_page
		eHome = self.nicol.eHome_page
		recip_page = self.nicol.recipient_page
		self.assertTrue(self.nicol.login(self.driver), messages.login)

		# Go to 'employee' role
		self.assertTrue(lobby_page.on())
		lobby_page.menu.click_option('settings')
		self.assertTrue(ps_page.on())
		self.assertEqual('employer', ps_page.menu.get_role())
		ps_page.menu.set_role('employee')
		self.assertTrue(eHome.on())

		#Desktop: Menu should maintain state
		#Mobile: Menu should close after switching
		if main.is_desktop():
			self.assertEqual('open', eHome.menu.get_menu_status())
		else:
			self.assertEqual('closed', eHome.menu.get_menu_status())

		# Go to 'employer' role
		eHome.menu.click_option('recipients')
		self.assertTrue(recip_page.on())

		recip_page.menu.set_role('employer')
		self.assertTrue(lobby_page.on())

		if main.is_desktop():
			self.assertEqual('open', lobby_page.menu.get_menu_status())
		else:
			self.assertEqual('closed', lobby_page.menu.get_menu_status())

		# repeat steps w/ skinny nav
		if main.is_desktop():
			lobby_page.menu.toggle()
			self.assertEqual('skinny', lobby_page.menu.get_menu_status())
			lobby_page.menu.click_option('settings')
			self.assertTrue(ps_page.on())
			ps_page.menu.set_role('employee')

			# menu should stay skinny
			self.assertTrue(eHome.on())
			self.assertEqual('skinny', eHome.menu.get_menu_status())

			# go back to 'employer' role
			eHome.menu.click_option('recipients')
			self.assertTrue(recip_page.on())
			self.assertEqual('skinny', recip_page.menu.get_menu_status())
			recip_page.menu.set_role('employer')

			self.assertTrue(lobby_page.on())
			self.assertEqual('skinny', lobby_page.menu.get_menu_status())
Exemple #3
0
 def mark_all_as_processed(self):
     # If any pending elections...
     # select all and mark as processed
     # Desktop: use mass command.
     # Mobile: select each individually
     if self.empty_msg is None:
         if main.is_desktop() and not self.all_selected():
             self.toggle_all()
         elif not main.is_desktop() and not self.all_selected():
             self.select_all_elections()
         return self.mark_as_processed()
     return True
	def test_no_balance(self):
		""" test_send_to_atm.py:TestATM.test_no_balance """
		# trying to send w/ no balance works as expected
		lobby_page = self.nicol.lobby_page
		eHome = self.nicol.eHome_page
		send_to_atm = self.nicol.send_to_atm_page
		recip = 'David Castillo'

		self.assertTrue(self.nicol.login(self.driver), messages.login)
		self.assertTrue(lobby_page.on())
		lobby_page.menu.set_role('employee')

		self.assertTrue(eHome.on())
		# menu should be closed on mobile
		if not main.is_desktop():
			self.assertFalse(eHome.menu.is_drawer_visible())
		eHome.send('atm')
		self.assertTrue(send_to_atm.on([0, 'Recipient']))
		send_to_atm.click_recipient(recip)
		self.assertTrue(send_to_atm.on([1, 'Amount']))

		# Step 2 - Set amount, check for balance error
		self.assertEqual([1, 'Amount'], send_to_atm.currentStep)
		mxn_amount = self.nicol.generate_bbva_amount()
		print(mxn_amount)
		self.assertFalse(send_to_atm.send_form.is_form_enabled())
		self.assertTrue(send_to_atm.send_form.has_balance_error())
		send_to_atm.send_form.set_bbva_amount(mxn_amount)
		self.assertTrue(send_to_atm.send_form.has_balance_error())
		send_to_atm.send_form.try_clear_error()
		self.assertFalse(send_to_atm.send_form.has_balance_error())
		self.assertFalse(send_to_atm.send_form.is_form_enabled())
 def try_clear_error(self):
     if self.has_error():
         # error not visible on mobile
         if not main.is_desktop():
             self.scroll_to_bottom()
         self.nav.click_el(self.error_button)
         time.sleep(.6)
	def get_invitation_info(self, table_entry):
	  """Given invitation entry parse out info"""
	  el_input = table_entry.find_element_by_tag_name('input')
	  if main.is_desktop():
	    # DESKTOP: get info out of each column
	    tds = table_entry.find_elements_by_tag_name('td')
	    info = {
	      'selected': el_input.is_selected(),
	      'name': tds[1].text,
	      'id': tds[2].text,
	      'phone': tds[3].text,
	      'email': tds[4].text,
	      'date': tds[5].text
	    }
	  else:
	    # MOBILE: get info out of each row
	    rows = table_entry.find_elements_by_class_name('table_entry_row')

	    info = {
	      'selected': el_input.is_selected(),
	      'name': rows[0].text[6:],
	      'id': rows[1].text[13:],
	      'phone': rows[2].text[14:],
	      'email': rows[3].text[7:],
	      'date': rows[4].text[14:]
	    }
	  # print(str(info))
	  return info
	def load_agree_checkbox(self):
		if main.is_desktop() and main.get_browser() == 'safari':
			# Safari doesn't like clicking the input element
			labels = self.driver.find_elements_by_tag_name('label')
			self.agree_checkbox = labels[-1]
		else:
			self.agree_checkbox = self.form.find_element_by_id('agreed')
Exemple #8
0
    def get_election_info(self, table_entry):
        """Given election entry parse out info"""
        el_input = table_entry.find_element_by_tag_name('input')
        if main.is_desktop():
            # DESKTOP: get info out of each column
            tds = table_entry.find_elements_by_tag_name('td')
            info = {
                'selected': el_input.is_selected(),
                'name': tds[1].text,
                'id': tds[2].text,
                'amount': tds[3].text,
                'routing': tds[4].text,
                'account': tds[5].text,
                'time_requested': tds[6].text
            }
        else:
            # MOBILE: get info out of each row
            rows = table_entry.find_elements_by_class_name('table_entry_row')

            info = {
                'selected': el_input.is_selected(),
                'name': rows[0].text[6:],
                'id': rows[1].text[13:],
                'amount': rows[2].text[18:],
                'routing': rows[3].text[15:],
                'account': rows[4].text[15:],
                'time_requested': rows[5].text[11:],
            }
        # print(str(info))
        return info
Exemple #9
0
    def get_table_entry(self, find_by, identifier):
        # find_by: 'index' or name of column header
        # identifier: index of election or string we try to match in col[find_by]
        if self.empty_msg is None:
            table_entry = None
            if find_by == 'index':
                return self.pending_elections[identifier]
            elif main.is_desktop():
                # Given find_by, get right column.
                # Return entry w/ data in col that matches identifier
                column_index = self.get_column_index(find_by)
                for i, election in enumerate(self.pending_elections):
                    tds = election.find_elements_by_tag_name('td')
                    if tds[column_index].text == identifier:
                        table_entry = self.pending_elections[i]
            else:
                # Given find_by, get right row.
                # Return entry w/ data in row that matches identifier
                row_index = self.get_row_index(find_by)
                for i, election in enumerate(self.pending_elections):
                    rows = election.find_elements_by_class_name(
                        'table_entry_row')
                    index = self.get_mobile_row_index(row_index)
                    if rows[row_index].text[index:].lower(
                    ) == identifier.lower():
                        table_entry = self.pending_elections[i]

            if table_entry is not None:
                return table_entry
        return None  # no pending elections or couldn't find w/ given info
Exemple #10
0
    def test_no_balance(self):
        """ test_send_to_bank.py:TestBank.test_no_balance """
        # trying to send w/ no balance works as expected
        lobby_page = self.nicol.lobby_page
        eHome = self.nicol.eHome_page
        send_to_bank = self.nicol.send_to_bank_page
        recip = 'Lourdes Ortega'

        self.assertTrue(self.nicol.login(self.driver), messages.login)
        self.assertTrue(lobby_page.on())
        lobby_page.menu.set_role('employee')

        self.assertTrue(eHome.on())
        # menu should be closed on mobile
        if not main.is_desktop():
            self.assertFalse(eHome.menu.is_drawer_visible())
        eHome.send('bank')
        self.assertTrue(send_to_bank.on())
        self.assertEqual([0, 'Choose Account'], send_to_bank.currentStep)
        self.assertTrue(send_to_bank.click_account(recip, 'Wells Fargo Bank'))

        # Step 2 - Set amount, check for balance error
        self.assertEqual([1, 'Specify Amount'], send_to_bank.currentStep)
        usd_amount = self.nicol.generate_amount()
        self.assertFalse(send_to_bank.send_form.is_form_enabled())
        self.assertTrue(send_to_bank.send_form.has_balance_error())
        send_to_bank.send_form.set_usd(usd_amount)
        self.assertTrue(send_to_bank.send_form.has_balance_error())
        send_to_bank.send_form.try_clear_error()
        self.assertFalse(send_to_bank.send_form.has_balance_error())
Exemple #11
0
    def load(self):
        self.cont = self.load_cont()

        find_by = self.cont.find_element_by_id

        # Todo: Load Logo, language dd

        # ID nightmare...
        # self.logo = find_by('public_logo_sm')
        self.logo = find_by('public_logo')
        # self.language_dd = find_by('locale_dropdown')

        self.pre_signed_in = self.load_pre_sign_in()
        # desktop only
        if main.is_desktop():
            # signin dropdown only on desktop when not signed in
            # never on signin or signin/code
            # Contents of dropdown do not exist when dropdown is closed
            try:
                self.sign_in_button = (
                    self.cont.find_element_by_id('signin_dropdown'))
            except NoSuchElementException:
                self.sign_in_button = None

        # forgot pw form loads when 'forgot' link clicked
        self.for_employers = self.load_employers_link()
        self.for_employees = self.load_employees_link()

        # mobile web only
        self.hamburger = self.try_load_hamburger()
    def set_sort(self, index, direction=True):
        # open sort options if not visible (always vis on desktop)
        # Index: 0=name, 1=ID, 2=Status, 3=election 4=date changed
        if not main.is_desktop() and not self.filters_open():
            self.toggle_filter()

        cur_sort = self.get_sort()
        old_first_emp = self.get_first_emp()
        #first_emp = self.get_employee('index', 0)

        if cur_sort[0] != int(index) or cur_sort[1] != direction:
            if cur_sort[0] != int(index):
                self.click_sort(index)
                cur_sort = self.get_sort()

            if cur_sort[1] != direction:
                self.reverse_sort(cur_sort[0])

        #raw_input('waiting on...?')
        #giving time for page to update. WDW until old_first_el != first_el and first_el is not None?
            time.sleep(2)
            '''WDW(self.driver, 10).until(lambda x:
				EC.presence_of_element_located((By.TAG_NAME , 'tr')) or
				EC.visibility_of_element_located((By.CLASS_NAME ,'employeeDiv'))
				)'''
            #	lambda x : old_first_emp != self.get_first_emp() and self.get_first_emp() is not None
            #	)
        self.load()
Exemple #13
0
 def set_mxn(self, amount):
   # clear current amount and enter given amount
   self.clear_currency_input('mxn')
   if main.is_desktop():
     self.mxn_input.send_keys(str(amount))
     # self.mxn_div.send_keys(amount)
   else:
     self.enter_currency(amount)
Exemple #14
0
 def load_form(self):
     # on desktop ignore 'sign in' dropdown form
     if main.is_desktop():
         # Sign In dropdown probably only exists when it's displayed.
         # Probably need to check how many forms there are
         print('got 2nd form')
         return self.driver.find_elements_by_tag_name('form')[-1]
     return self.driver.find_element_by_tag_name('form')
Exemple #15
0
 def click_for_employees(self):
     if main.is_desktop():
         if self.for_employees != None:
             self.for_employees.click()
             WDW(self.driver, 10).until(
                 EC.presence_of_element_located((By.ID, 'contactEmail2')))
     else:
         self.select_action('employees')
Exemple #16
0
    def click_logo(self):
        """click visible header logo"""
        logo = self.logo
        if main.is_desktop() and not self.logo.is_displayed():
            # scrolled to top on desktop and we need to load other logo
            logo = self.cont.find_element_by_id('public_logo')

        self.nav.click_el(logo)
	def click_invitation(self, find_by, identifier):
	 	invitation = self.get_table_entry(find_by, identifier)
	 	if(main.is_desktop() is False):
	 		row = invitation.find_element_by_class_name('table_entry_row')
	 	else:
	 		row = invitation.find_elements_by_tag_name('td')[1]

	 	self.move_to_el(row)
Exemple #18
0
	def open(self):
		"""Mobile: make sure drawer is 'open'"""
		# desktop: make sure menu is 'open'
		if not main.is_desktop() and not self.is_drawer_visible():
			self.hamburger.click()
			WDW(self.driver, 2).until(
				EC.element_to_be_clickable((By.CLASS_NAME, 'drawer_profile')))
			# WDW(self.driver, 2).until(
			# 	EC.element_to_be_clickable((By.CLASS_NAME, 'drawer_support')))
			self.load(hamburger=False, loading_page=False)

			# make sure menu starts at top
			self.driver.execute_script("window.scrollTo(0, 0)")
			time.sleep(.4)
		elif main.is_desktop() and self.get_menu_status() == 'skinny':
			self.toggle()
			WDW(self.driver, 10).until(lambda x: self.get_menu_status() != 'skinny')
			self.load(hamburger=False, loading_page=False)
Exemple #19
0
 def click_admin(self, name):
     admin = self.get_admin(name, False)
     if admin is not None:
         #Must click text on mobile. Extend hitbox to left edge?
         if not main.is_desktop():
             admin = admin.find_elements_by_class_name('table_entry_row')[0]
         self.move_to_el(admin)
     else:
         print('could not find admin with name: ' + name)
Exemple #20
0
	def try_load_toggle(self):
		"""Should only have menu toggle on desktop"""
		if main.is_desktop():
			try:
				return self.driver.find_element_by_class_name('mini-button')
			except NoSuchElementException:
				return None
		else:
			return None
 def set_election(self, employer, amount):
     employer_row = self.get_employer_row(employer)
     if employer_row is not None:
         self.clear_pay_election(employer_row)
         # should still be focused
         if main.is_desktop():
             AC(self.driver).send_keys(amount).perform()
         else:
             self.enter_currency(amount)
 def clear_pay_election(self, employer_row):
     # set focus and clear out existing election for given employer row el
     self.set_focus_on_employer(employer_row)
     amount = self.get_election_amount(employer_row)
     # desktop: hit backspace until input clear
     if main.is_desktop():
         for i in xrange(len(amount)):
             AC(self.driver).send_keys(Keys.BACKSPACE).perform()
     else:  # Mobile: hit backspace on custom keyboard
         self.clear_currency(amount)
Exemple #23
0
 def get_admin_el(self, admin, col_index):
     try:
         if main.is_desktop():
             el = admin.find_elements_by_tag_name('td')[col_index]
         else:
             el = admin.find_elements_by_class_name(
                 'table_entry_row')[col_index]
         return el
     except (NoSuchElementException, IndexError) as e:
         return None
Exemple #24
0
 def sign_in_open(self):
     # is signin dropdown open?
     if main.is_desktop() and self.sign_in_button:
         try:
             el = self.driver.find_element_by_id('forgot_password')
             if el.is_displayed():
                 return True
         except NoSuchElementException:
             pass
     return False
Exemple #25
0
 def try_load_elections(self):
     try:
         if main.is_desktop():
             self.table = self.driver.find_element_by_tag_name('table')
             self.table_body = self.table.find_element_by_tag_name('tbody')
             return self.table_body.find_elements_by_tag_name('tr')
         else:
             return self.driver.find_elements_by_class_name('table_entry')
     except NoSuchElementException:
         return None
Exemple #26
0
    def sign_in_submit(self, email='', password='', submit=True):
        # No sign in dropdown on mobile
        if main.is_desktop():
            # Make sure dropdown is visible (won't have dropdown on signin page)
            if self.sign_in_button:
                if not self.sign_in_open():
                    self.nav.click_el(self.sign_in_button)

                self.signInForm = SignInForm(self.driver)
                WDW(self.driver, 10).until(lambda x: self.signInForm.load())
                self.signInForm.submit(email, password, submit)
Exemple #27
0
 def forgot_password_open(self):
     # Is forgot password form visible?
     if main.is_desktop() and self.sign_in_button:
         try:
             resetPWform = self.driver.find_element_by_class_name(
                 'resetPWForm')
             if resetPWform.is_displayed():
                 return True
         except NoSuchElementException:
             pass
     return False
 def click_plus(self):
     self.add_button.click()
     time.sleep(.4)
     try:
         find_by = self.driver.find_element_by_id
         self.add_employee_button = find_by('add_employee')
         # only has multiple employees option on desktop
         if main.is_desktop():
             self.add_multiple_employees = find_by('add_employees')
     except NoSuchElementException:
         fail = 1 + '2'
Exemple #29
0
 def scroll_input_into_view(self):
     # Mobile: scroll so input in view
     if not main.is_desktop():
         el_bottom = self.get_el_location(self.code_input, 'bottom')
         window_height = self.get_window_height()
         # add 48 for continue button. Extra for ios web footer
         ios_footer = 0
         if main.is_ios() and main.is_web():
             ios_footer = 40
         scroll_distance = el_bottom - window_height + 48 + ios_footer
         self.move('down', scroll_distance)
Exemple #30
0
 def move_picker(self, direction):
   if main.is_desktop():
     if direction == 'down':
       self.pickerDown.click()
     else:
       self.pickerUp.click()
   else:
     if direction == 'down':
       self.pickerOptions[self.get_picker_index() + 2].click()
     else:
       self.pickerOptions[self.get_picker_index() - 2].click()