Beispiel #1
0
    def test_required_fields(self):
        """ test_authentication.py:TestForgotPassword.test_required_fields """
        # Sometimes creates test-specific sendmi error message. Hits backend weird?
        credentials = self.nicol.credentials
        signin_page = self.nicol.signin_page
        reset_page = self.nicol.reset_password_page
        code_page = self.nicol.reset_password_code_page
        new_page = self.nicol.reset_password_new_page
        lobby_page = self.nicol.lobby_page

        # assert inputs on public 'Reset Password' page are required as expected
        if main.is_web():
            self.assertTrue(reset_page.go())
        else:
            self.assertTrue(signin_page.on())
            signin_page.click_password_reset()
            self.assertTrue(reset_page.on())

        reset_page.submit('')
        tag = 'p'
        error = "Required"
        error_count = reset_page.number_of_elements
        self.assertEqual(1, error_count(tag, error))

        reset_page.submit('*****@*****.**', False)
        # iOS: Sending keys does not remove 'required' error
        if not main.is_ios():
            self.assertEqual(0, error_count(tag, error))

        reset_page.submit(credentials['email'])
        self.assertTrue(code_page.on())
        code_page.enter_code()
        self.assertTrue(code_page.on())
        code_page.enter_code()

        self.assertTrue(new_page.on())
        new_page.click_continue()
        self.assertEqual(1, error_count(tag, error))
        new_page.set_password(credentials['password'])
        # iOS: Sending keys does not remove 'required' error
        if not main.is_ios():
            self.assertEqual(0, error_count(tag, error))
        new_page.click_continue()
        WebDriverWait(
            self.driver, 15).until(lambda x: EC.visibility_of_element_located(
                (By.CLASS_NAME, 'invitations_card'
                 )) or EC.visibility_of_element_located((By.ID, 'cash-bar')))
        #raw_input('page?')
        self.assertTrue(lobby_page.on())
Beispiel #2
0
 def set_speed_toggle(self, speed):
   if self.get_speed_toggle() != speed:
     if main.is_ios():
       el = self.toggle.find_element_by_tag_name('input')
       el.click()
     else:
       self.move_to_el(self.toggle)
Beispiel #3
0
    def test_required_fields(self):
        """ test_authentication.py:TestLogin.test_required_fields """
        # assert 'Sign In' page inputs are required as expected
        credentials = self.nicol.credentials
        signin_page = self.nicol.signin_page

        if not main.is_web():
            self.assertTrue(signin_page.on())
        else:
            signin_page.go()
        signin_page.click_login()

        error = 'Required'
        num_errors = 2
        self.WDWait.until(
            EC.text_to_be_present_in_element(
                (By.ID, 'signin_form_user_helper'), error))
        self.assertEqual(2, signin_page.number_of_elements('p', error))

        # ios can't tell that email was updated so there's still 2 errors
        if not main.is_ios():
            signin_page.set_email(credentials['email'])
            self.WDWait.until(
                EC.text_to_be_present_in_element(
                    (By.ID, 'signin_form_pw_helper'), error))
            num_errors = 1
            self.assertEqual(1, signin_page.number_of_elements('p', error))
            signin_page.set_password(credentials['password'])

            self.assertEqual(0, signin_page.number_of_elements('p', error))
Beispiel #4
0
 def get_el(self, name):
     """Return input element given name. None if invalid name"""
     if name == 'business_name':
         return self.business_name_input
     elif name == 'dba':
         return self.dba_input
     elif name == 'ein':
         return self.ein_input
     elif name == 'hr_email':
         return self.hr_email_input
     elif name == 'line1':
         return self.line1_input
     elif name == 'line2':
         return self.line2_input
     elif name == 'city':
         return self.city_input
     elif name == 'postal_code':
         return self.postal_code_input
     elif name == 'phone':
         return self.phone_input
     elif name == 'website':
         return self.website_input
     elif name == 'state':
         if main.is_ios():  # click doesn't regester on self.state_cont
             return self.state_dd
         return self.state_cont
     else:
         return None
 def load_language_selector(self):
     self.language_cont = (
         self.form.find_element_by_class_name('settings_locale'))
     if main.is_ios():
         self.language_selector = (
             self.language_cont.find_elements_by_tag_name('div')[3])
     else:
         self.language_selector = (
             self.language_cont.find_element_by_tag_name('div'))
Beispiel #6
0
 def type_country(self, country):
     # probably won't work on mobile (keyboard not open)
     el = self.location
     if main.is_ios():
         el = self.location.find_element_by_tag_name('button')
     el.click()
     AC(self.driver).send_keys(country).perform()
     time.sleep(.4)
     AC(self.driver).send_keys(Keys.ENTER).perform()
     time.sleep(.4)
    def enter_code(self):
        self.code_input.clear()
        self.code_input.send_keys(self.code)
        if main.is_ios():
            self.code_input.send_keys('')

        if self.code_accepted():
            self.continue_button.click()
        else:
            raise Exception("Took too long to validate login code")
Beispiel #8
0
 def load(self):
     try:
         self.nav = NavigationFunctions(self.driver)
         self.load_body()
         self.header = header.PrivateHeader(self.driver)
         self.menu = menu.SideMenu(self.driver)
         if main.is_web() and main.is_ios():
             self.clear_ios_footer()
         return True
     except (NoSuchElementException, StaleElementReferenceException) as e:
         return False
Beispiel #9
0
 def click_transaction(self, index=0):
     # Possible to load page before transactions show up
     if len(self.transactions) == 0:
         raw_input("No Transactions found")
     if main.is_ios():
         el = self.transactions[index].find_elements_by_tag_name('div')[0]
         el.click()
     else:
         self.transactions[index].click()
     WDW(self.driver, 10).until(
         EC.presence_of_element_located((By.ID, 'transfer_ok_button')))
Beispiel #10
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)
Beispiel #11
0
 def get(self, name):
     """Return the text of the element with the given name"""
     el = self.get_el(name)
     if el is not None:
         if name == 'state':
             # ignore text in label
             if not main.is_ios():  # ios: el is already the child
                 el = el.find_elements_by_tag_name('div')[0]
             return el.text
         return el.get_attribute('value')
     return None
Beispiel #12
0
    def ios_scroll(self, direction, pixels):
        """Use TouchActions to scroll given amount up or down (ios)
    Note: cannot use TA on android w/out switching to native context"""
        if main.is_ios():
            prefix = '-'
            if direction.lower() == 'up':
                prefix = ''
            move_amount = int(prefix + str(pixels))

            TA(self.driver).press(None, 10, 400).move_to(
                None, 0, move_amount).release().perform()
            time.sleep(.6)
Beispiel #13
0
 def type_location(self, location):
     self.location_input.clear()
     self.location_input.send_keys(location)
     if main.is_ios():
         self.location_input.click()
     # wait up to 5 seconds for options to show up
     presence = EC.presence_of_all_elements_located
     try:
         self.options = WDW(self.driver, 10).until(
             presence((By.CLASS_NAME, 'sm-place-menuitem')))
     except TimeoutException:
         self.options = None
Beispiel #14
0
    def test_invalid_inputs(self):
        """ test_business.py:TestPrefilled.test_invalid_inputs """
        # assert inputs on 'Prefilled' page handle invalid input as expected
        lobby_page = self.nicol.lobby_page
        add_page = self.nicol.add_business_page
        prefilled_page = self.nicol.business_prefilled_page
        self.assertTrue(self.nicol.login(self.driver), messages.login)

        self.assertTrue(lobby_page.on())
        lobby_page.menu.add_a_business()

        self.assertTrue(add_page.on())
        # raw_input('adding business')
        add_page.add("Nintendo of America WA")
        # raw_input('added?')
        self.assertTrue(prefilled_page.on())
        self.assertFalse(prefilled_page.agreed())
        prefilled_page.toggle_agree()
        self.assertTrue(prefilled_page.agreed())
        prefilled_page.click_details()
        prefilled_page.set('ein', '556787898')
        invalid_emails = ['invalid', 'invalid@', 'invalid.com']
        error = "Invalid email address"
        tag = 'p'
        for email in invalid_emails:
            prefilled_page.set('hr_email', email)
            prefilled_page.click_continue()
            self.assertEqual(
                1, prefilled_page.number_of_elements_containing(tag, error))
        prefilled_page.set('postal_code', '123456789012345678901')
        prefilled_page.click_continue()
        error = "Expected Zip Code format: 12345 or 12345-1234."
        self.assertEqual(1, prefilled_page.number_of_elements(tag, error))
        prefilled_page.set('postal_code', '98052')
        # ios won't know you've updated zip code unless you click continue
        if not main.is_ios():
            self.assertEqual(0, prefilled_page.number_of_elements(tag, error))
        invalid_phones = ['1234567890', '801123456']
        '''error = (
			'\"{phone}\" is not a valid phone number in the United States.'
		)'''
        error = " is not a valid phone number in US."  #in the United States.
        for phone in invalid_phones:
            prefilled_page.set('phone', phone)
            prefilled_page.click_continue()
            #time.sleep(.2)
            self.assertEqual(
                1, prefilled_page.number_of_elements_containing(tag, error))
        prefilled_page.set('phone', '(425) 882-2040')
Beispiel #15
0
 def click_employee(self, find_by, identifier):
     emp = self.get_employee(find_by, identifier, False)
     if emp is None:
         print('no employee found')
         return False
     else:
         if main.is_ios():  # ios needs to click a child div (not menu div)
             emp = emp.find_elements_by_tag_name('div')[3]
         #elif main.is_desktop():
         #	emp = emp.find_elements_by_tag_name('td')[1]
         self.click_toast()
         # move_to_el handles navigating to employee and clicking
         self.move_to_el(emp)  # emp.click()
         time.sleep(.4)
         return True
Beispiel #16
0
    def enter_code(self):
        self.scroll_input_into_view()
        WDW(self.driver,
            10).until(EC.presence_of_element_located((By.ID, 'code')))
        self.code_input.clear()
        self.code_input.send_keys(self.code)
        if main.is_ios():
            self.code_input.click()

        # no continue button on native app
        if main.is_web():
            # Don't try and find primary button: Desktop has signin form
            WDW(self.driver,
                6).until(lambda x: self.is_enabled(self.continue_button))
            self.continue_button.click()
Beispiel #17
0
 def enter_code(self):
     self.scroll_to_bottom()
     self.code_input.clear()
     self.code_input.send_keys(self.code)
     if main.is_ios():
         self.code_input.send_keys('')
     # no continue button on native app
     if main.is_web():
         # WDW fails on Safari. Not sure why.
         if main.get_browser() == 'safari':
             time.sleep(1)
         else:
             WDW(self.driver, 10).until(
                 EC.element_to_be_clickable(
                     (By.CLASS_NAME, 'primaryButton')))
         self.continue_button.click()
	def click_recipient(self, identifier):
		"""Given index or name of recipient, find and click 'send' or 'edit'
			Can only edit on 'recipient select' page
		"""
		if type(identifier) is int:
			recip = self.get_recipient_by_index(identifier)
		else:
			recip = self.get_recipient_by_name(identifier)
		if recip != None:
			# need to grab recip's first div for ios (one with cursor:pointer)
			if main.is_ios():
				recip = recip.find_elements_by_tag_name('div')[0]
			self.move_to_el(recip)
			# Not necessarily on next step. Handle reloading in test
		else:
			raw_input(str(identifier) + '?')
			raise Exception("Error: could not find recipient: " + str(identifier))
Beispiel #19
0
 def click_recipient(self, identifier, action='send'):
     """Given index or name of recipient, find and click 'send' or 'edit'
   Can only edit on 'recipient select' page
 """
     if action == 'edit':
         self.edit_recipient(identifier)
     else:
         if type(identifier) is int:
             recip = self.get_recipient_by_index(identifier)
         else:
             recip = self.get_recipient_by_name(identifier)
         if recip != None:
             # need to grab recip's first div for ios (one with cursor:pointer)
             if main.is_ios():
                 recip = recip.find_elements_by_tag_name('div')[0]
             self.move_to_el(recip)
         else:
             raise Exception("Error: could not find recipient: " +
                             identifier)
Beispiel #20
0
    def load_recipients(self):
        # Grab recipients and info for their bank accounts
        self.recipUL = self.driver.find_elements_by_class_name('recipAccounts')
        # Should have at least 1. Fail to load page if there aren't any
        fail = self.recipUL[0]

        self.recipients = {}
        try:
            for i, recip in enumerate(self.recipUL):
                name = self.read_recip_name(i)
                bank_accounts = self.recipUL[i].find_elements_by_tag_name('li')
                del bank_accounts[0]  # 1st li is header crap

                # Bank name, account #, clickable element
                accounts = []
                for i, account in enumerate(bank_accounts):
                    divs = bank_accounts[i].find_elements_by_tag_name('div')
                    # Desktop web: divs[1]
                    # Mobile web: divs[0]
                    # Mobile native: ?
                    # for i, div in enumerate(divs):
                    #   print(div.text)

                    if main.is_web():
                        text = divs[0].text
                    else:
                        text = divs[1].text
                    info = self.read_account_info(text)

                    if main.is_ios():
                        info['element'] = divs[0]
                    else:
                        info['element'] = bank_accounts[i]
                    accounts.append(info)
                self.recipients[name] = accounts
        except Exception as ex:
            template = "An exception of type {0} occurred. Arguments:\n{1!r}"
            message = template.format(type(ex).__name__, ex.args)
            raw_input(message)
    def set_input(self, element, value):
        # iOS Native: Click after changing value (otherwise won't recognize new value)

        # Get input/textarea el out of element
        inputEl = self.find_input(element)
        val = inputEl.get_attribute('value')

        # Wait for input to be editable (displayed and enabled)
        if inputEl:
            setValue = False
            count = 0
            while not setValue and count < 5:
                try:
                    if val:
                        self.clear_input(inputEl)

                    inputEl.send_keys(value)
                    if main.is_ios() and not main.is_web():
                        time.sleep(.4)
                        self.click_el(inputEl)
                    if inputEl.get_attribute('value') == value:
                        setValue = True
                    elif inputEl.get_attribute('value') == self.to_phone(
                            value):
                        # Check if input formatted value to phone#
                        setValue = True
                    else:
                        print('SetInput: Expected "' + value + '", loaded "' +
                              str(inputEl.get_attribute('value') + '"'))
                except InvalidElementStateException:
                    print('SetInput: InvalidElementStateException')
                if not setValue:
                    time.sleep(.2)
                    count += 1
        else:
            print('SetInput: Could not find inputEl.')
            raise WebDriverException('SetInput: Could not find inputEl.')
Beispiel #22
0
 def set_phone(self, phone):
     self.phone_input.clear()
     self.phone_input.send_keys(phone)
     if main.is_ios():
         self.phone_input.send_keys('')
Beispiel #23
0
 def set_remove_code(self, code):
     self.confirm_code_input.clear()
     self.confirm_code_input.send_keys(code)
     if main.is_ios():  # send_keys doesn't seem to update react component.
         self.confirm_code_input.send_keys('')
Beispiel #24
0
 def enter_code(self):
     self.code_input.clear()
     self.code_input.send_keys(self.code)
     if main.is_ios():
         self.code_input.send_keys('')
Beispiel #25
0
 def set_clabe(self, clabe):
     self.clabe_input.clear()
     self.clabe_input.send_keys(clabe)
     if main.is_ios():
         self.clabe_input.send_keys('')
Beispiel #26
0
class TestSettings(unittest.TestCase):
    def setUp(self):
        self.driver = browser.start(main.get_env(), main.get_browser())
        self.nicol = profiles.Profile(self.driver, 'nicol')
        self.patrick = profiles.Profile(self.driver, 'patrick')
        self.krabs = profiles.Profile(self.driver, 'krabs')
        self.squid = profiles.Profile(self.driver, 'squid')
        self.WDWait = WebDriverWait(self.driver, 10)

    def tearDown(self):
        self.driver.quit()

    @unittest.skipIf(main.get_priority() < 2, "Priority = 2")
    def test_business_remove(self):
        """ test_business.py:TestSettings.test_business_remove """
        # assert owner can remove business
        # requisites: "Subway" is removed after test
        lobby_page = self.krabs.lobby_page
        emp_page = self.krabs.employee_page
        add_page = self.krabs.add_business_page
        prefilled_page = self.krabs.business_prefilled_page
        settings_page = self.krabs.business_settings_page
        eHome = self.krabs.eHome_page
        default_business = 'Krusty Krab'
        self.assertTrue(self.krabs.login(self.driver), messages.login)

        business_name = 'Subway Highland Utah'
        self.assertTrue(lobby_page.on())  #login failure
        lobby_page.menu.add_a_business()

        self.assertTrue(add_page.on())
        add_page.add(business_name)
        self.assertTrue(prefilled_page.on())
        prefilled_page.set('ein', '234567847')
        prefilled_page.click_details()
        prefilled_page.set('business_name', business_name)
        prefilled_page.set('line1', 'new line1')
        prefilled_page.toggle_agree()
        prefilled_page.click_continue()

        self.assertTrue(lobby_page.on())
        self.assertEqual(business_name, lobby_page.menu.get_current_business())

        # Loop to remove all instances of particular business
        has_business = lobby_page.menu.has_business(business_name)
        while has_business:
            # make sure business is selected
            if lobby_page.menu.get_current_business() != business_name:
                lobby_page.menu.select_business(business_name)
                self.assertTrue(lobby_page.on())

            # remove business
            lobby_page.menu.click_option('business settings')
            self.assertTrue(settings_page.on())
            settings_page.remove_business("REMOVE " + business_name)

            # change role
            self.assertTrue(eHome.on())
            eHome.menu.set_role('employer')
            self.assertTrue(lobby_page.on())

            # check if another instance of business
            has_business = lobby_page.menu.has_business(business_name)

        # done removing business. Select default business
        self.assertFalse(lobby_page.menu.has_business(business_name))
        lobby_page.menu.select_business(default_business)
        self.assertTrue(lobby_page.on())

    @unittest.skipIf(main.get_priority() < 3, "Priority" or main.is_ios())
    def test_invalid_inputs(self):
        """ test_business.py:TestSettings.test_invalid_inputs """
        # assert 'Business Settings' page handles invalid inputs as expected
        lobby_page = self.patrick.lobby_page
        emp_page = self.patrick.employee_page
        add_page = self.patrick.add_business_page
        prefilled_page = self.patrick.business_prefilled_page
        settings_page = self.patrick.business_settings_page
        eHome = self.patrick.eHome_page
        default_business = 'Chum Bucket'
        self.assertTrue(self.patrick.login(self.driver), messages.login)

        self.assertTrue(lobby_page.on())
        if lobby_page.menu.get_current_business() != default_business:
            lobby_page.menu.select_business(default_business)
            self.assertTrue(lobby_page.on())
        lobby_page.menu.add_a_business()

        self.assertTrue(add_page.on())
        business_name = "Nintendo of America"
        search_term = business_name + ' WA'
        add_page.add(search_term)
        prefilled_page.load()
        ein = "66787665"
        prefilled_page.set('ein', ein)
        prefilled_page.toggle_agree()
        prefilled_page.click_continue()

        self.assertTrue(lobby_page.on())
        lobby_page.menu.click_option('business settings')

        self.assertTrue(settings_page.on())
        settings_page.set('postal_code', '123456789012345678901')
        self.assertFalse(settings_page.saved())
        tag = 'p'
        error = "Expected Zip Code format: 12345 or 12345-1234."
        error_count = settings_page.number_of_elements
        self.assertEqual(1, error_count(tag, error))
        settings_page.set('postal_code', 'abc')
        self.assertFalse(settings_page.saved())
        self.assertEqual(1, error_count(tag, error))
        settings_page.set('postal_code', '98051')
        self.assertTrue(settings_page.saved())
        invalid_phones = ['1234567890', '801123456']
        error = " is not a valid phone number in US."
        for phone in invalid_phones:
            settings_page.set('phone', phone)
            self.assertFalse(settings_page.saved())
            self.assertEqual(
                1, prefilled_page.number_of_elements_containing(tag, error))
        settings_page.set('phone', '(425) 882-2040')
        settings_page.set('website', 'new site')
        self.assertFalse(settings_page.saved())
        error = "May not contain spaces."
        #time.sleep(1)
        self.assertEqual(1, settings_page.number_of_elements('p', error))
        site = 'www.nintendo.com'
        settings_page.set('website', site)
        self.assertTrue(settings_page.saved())
        self.assertEqual('http://' + site, settings_page.get('website'))
        self.assertTrue(settings_page.saved())
        settings_page.remove_business("REMOVE NINTENDO OF AMERICA")

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

        # Loop to remove all instances of particular business
        has_business = lobby_page.menu.has_business(business_name)
        while has_business:
            # make sure business is selected
            if lobby_page.menu.get_current_business() != business_name:
                lobby_page.menu.select_business(business_name)
                self.assertTrue(lobby_page.on())

            # remove business
            lobby_page.menu.click_option('business settings')
            self.assertTrue(settings_page.on())
            settings_page.remove_business("REMOVE " + business_name)

            # change role
            self.assertTrue(eHome.on())
            eHome.menu.set_role('employer')
            self.assertTrue(lobby_page.on())

            # check if another instance of business
            has_business = lobby_page.menu.has_business(business_name)

        # done removing business. Select default business
        self.assertFalse(lobby_page.menu.has_business(business_name))
        lobby_page.menu.select_business(default_business)
        self.assertTrue(lobby_page.on())

    @unittest.skipIf(main.is_ios(), "Autosave input + iOS = suicide")
    def test_persist(self):
        """ test_business.py:TestSettings.test_persist """
        #Change business settings and assert persistence across logins.
        lobby_page = self.nicol.lobby_page
        settings_page = self.nicol.business_settings_page
        self.assertTrue(self.nicol.login(self.driver), messages.login)

        self.assertTrue(lobby_page.on())
        business = 'Multiverse'
        if lobby_page.menu.get_current_business() != business:
            lobby_page.menu.select_business(business)
            self.assertTrue(lobby_page.on())
        lobby_page.menu.click_option('business settings')
        self.assertTrue(settings_page.on())

        get = settings_page.get
        #change _init args to match Multiverse dictionary data?
        hr_init = settings_page.get('hr_email')
        dba_init = settings_page.get('dba')
        line1_init = settings_page.get('line1')
        line2_init = settings_page.get('line2')
        city_init = settings_page.get('city')
        postal_init = settings_page.get('postal_code')
        phone_init = settings_page.get('phone')
        site_init = settings_page.get('website')
        hr2 = '*****@*****.**'
        dba2 = 'New Dba'
        line12 = 'new line1'
        line22 = 'new line2'
        city2 = 'new city'
        postal2 = '80987'
        phone2 = '(801) 987-6576'
        site2 = 'http://new_site'
        settings_page.set('hr_email', hr2)
        settings_page.set('dba', dba2)
        settings_page.set('line1', line12)
        settings_page.set('line2', line22)
        settings_page.set('city', city2)
        settings_page.set('postal_code', postal2)
        settings_page.set('phone', phone2)
        settings_page.set('website', site2)

        self.assertTrue(settings_page.saved())
        settings_page.menu.sign_out()

        # login and make sure changes persisted
        self.assertTrue(self.nicol.login(self.driver), messages.login)
        self.assertTrue(lobby_page.on())
        lobby_page.menu.click_option('business settings')

        self.assertTrue(settings_page.on())
        hr_final = settings_page.get('hr_email')
        dba_final = settings_page.get('dba')
        line1_final = settings_page.get('line1')
        line2_final = settings_page.get('line2')
        city_final = settings_page.get('city')
        postal_final = settings_page.get('postal_code')
        phone_final = settings_page.get('phone')
        site_final = settings_page.get('website')
        self.assertEqual(hr2, hr_final)
        self.assertEqual(dba2, dba_final)
        self.assertEqual(line12, line1_final)
        self.assertEqual(line22, line2_final)
        self.assertEqual(city2, city_final)
        self.assertEqual(postal2, postal_final)
        self.assertEqual(phone2, phone_final)
        self.assertEqual(site2, site_final)

        multiverse_creds = profiles.credentials.get_credentials('multiverse')
        settings_page.set('hr_email', multiverse_creds['hr'])
        settings_page.set('dba', multiverse_creds['name'])
        settings_page.set('line1', multiverse_creds['line1'])
        settings_page.set('line2', '')
        settings_page.set('city', multiverse_creds['city'])
        settings_page.set('postal_code', multiverse_creds['postal_code'])
        settings_page.set('phone', multiverse_creds['phone'])
        settings_page.set('website', multiverse_creds['website'])

        self.assertTrue(settings_page.saved())

    @unittest.skipIf(main.get_priority() < 3, "Priority" or main.is_ios())
    def test_required_fields(self):
        """ test_business.py:TestSettings.test_required_fields """
        # assert 'Business Settings' page requires expected fields
        lobby_page = self.squid.lobby_page
        emp_page = self.squid.employee_page
        add_page = self.squid.add_business_page
        prefilled_page = self.squid.business_prefilled_page
        settings_page = self.squid.business_settings_page
        eHome = self.squid.eHome_page
        default_business = 'Salty Spitoon'
        business_name = "Nintendo of America"
        search_term = business_name + ' WA'
        ein = "66787665"
        self.assertTrue(self.squid.login(self.driver), messages.login)

        self.assertTrue(lobby_page.on())
        lobby_page.menu.add_a_business()
        self.assertTrue(add_page.on())
        add_page.add(search_term)
        self.assertTrue(prefilled_page.on())
        prefilled_page.set('ein', ein)
        prefilled_page.toggle_agree()
        prefilled_page.click_continue()

        self.assertTrue(lobby_page.on())
        lobby_page.menu.click_option('business settings')

        self.assertTrue(settings_page.on())
        settings_page.set('business_name', '')
        settings_page.set('dba', '')
        settings_page.set('ein', '')
        settings_page.set('hr_email', '')
        settings_page.set('line1', '')
        settings_page.set('city', '')
        settings_page.set('postal_code', '')
        settings_page.set('phone', '')
        settings_page.set('website', '')

        error = 'Required'
        tag = 'p'
        error_count = settings_page.number_of_elements
        self.assertEqual(7, error_count(tag, error))
        settings_page.set('business_name', business_name)
        self.assertEqual(6, error_count(tag, error))
        settings_page.set('ein', ein)
        self.assertEqual(5, error_count(tag, error))
        settings_page.set('hr_email', "*****@*****.**")
        self.assertEqual(4, error_count(tag, error))
        settings_page.set('line1', 'my address')
        self.assertEqual(3, error_count(tag, error))
        settings_page.set('city', 'my city')
        self.assertEqual(2, error_count(tag, error))
        settings_page.set('postal_code', '86778')
        self.assertEqual(1, error_count(tag, error))
        settings_page.set('phone', '(801) 756-9876')
        self.assertTrue(settings_page.saved())
        settings_page.click_remove()
        self.assertFalse(settings_page.confirm_remove_button_enabled())
        settings_page.set_remove_code('REMOVE NINTENDO OF AMERICA')
        self.assertTrue(settings_page.confirm_remove_button_enabled())
        settings_page.click_confirm_remove()

        self.assertTrue(eHome.on())
        eHome.menu.set_role('employer')
        self.assertTrue(lobby_page.on())
        # Loop to remove all instances of particular business
        has_business = lobby_page.menu.has_business(business_name)
        while has_business:
            # make sure business is selected
            if lobby_page.menu.get_current_business() != business_name:
                lobby_page.menu.select_business(business_name)
                self.assertTrue(lobby_page.on())

            # remove business
            lobby_page.menu.click_option('business settings')
            self.assertTrue(settings_page.on())
            settings_page.remove_business("REMOVE " + business_name)

            # change role
            self.assertTrue(eHome.on())
            eHome.menu.set_role('employer')
            self.assertTrue(lobby_page.on())

            # check if another instance of business
            has_business = lobby_page.menu.has_business(business_name)

        # done removing business. Select default business
        self.assertFalse(lobby_page.menu.has_business(business_name))
        lobby_page.menu.select_business(default_business)
        self.assertTrue(lobby_page.on())

    @unittest.skipIf(main.is_ios() or main.get_priority() < 2,
                     "Autosave input + iOS = suicide")
    def test_update(self):
        """ test_business.py:TestSettings.test_update """
        # assert changes to 'Business Settings' page persist
        lobby_page = self.nicol.lobby_page
        emp_page = self.nicol.employee_page
        settings_page = self.nicol.business_settings_page
        self.assertTrue(self.nicol.login(self.driver), messages.login)

        name = "Multiverse"
        # ein1 = '4896434'
        self.assertTrue(lobby_page.on())
        # go to Multiverse business settings, select multiverse if needed
        if lobby_page.menu.get_current_business() != 'Multiverse':
            lobby_page.menu.select_business(name)
            self.assertTrue(lobby_page.on())
        lobby_page.menu.click_option('business settings')

        self.assertTrue(settings_page.on())
        self.assertFalse(settings_page.has_horizontal_scroll())
        get = settings_page.get
        hr_init = get('hr_email')
        dba_init = get('dba')
        line1_init = get('line1')
        line2_init = get('line2')
        city_init = get('city')
        postal_init = get('postal_code')
        phone_init = get('phone')
        site_init = get('website')
        hr2 = '*****@*****.**'
        dba2 = 'New Dba'
        line12 = 'new line1'
        line22 = 'new line2'
        city2 = 'new city'
        postal2 = '80987'
        phone2 = '(801) 987-6576'
        site2 = 'http://new_site'

        settings_page.set('hr_email', hr2)
        settings_page.set('dba', dba2)
        settings_page.set('line1', line12)
        settings_page.set('line2', line22)
        settings_page.set('city', city2)
        settings_page.set('postal_code', postal2)
        settings_page.set('phone', phone2)
        settings_page.set('website', site2)

        self.assertTrue(settings_page.saved())
        settings_page.menu.click_option('employees')
        self.assertTrue(emp_page.on())
        emp_page.menu.click_option('business settings')
        self.assertTrue(settings_page.on())
        #Test for persistence
        self.assertEqual(hr2, get('hr_email'))
        self.assertEqual(dba2, get('dba'))
        self.assertEqual(line12, get('line1'))
        self.assertEqual(line22, get('line2'))
        self.assertEqual(city2, get('city'))
        self.assertEqual(postal2, get('postal_code'))
        self.assertEqual(phone2, get('phone'))
        self.assertEqual(site2, get('website'))
        #Revert changes
        settings_page.set('hr_email', hr_init)
        settings_page.set('dba', dba_init)
        settings_page.set('line1', line1_init)
        settings_page.set('line2', line2_init)
        settings_page.set('city', city_init)
        settings_page.set('postal_code', postal_init)
        settings_page.set('phone', phone_init)
        settings_page.set('website', site_init)
Beispiel #27
0
class TestDetails(unittest.TestCase):
    def setUp(self):
        self.driver = browser.start(main.get_env(), main.get_browser())
        self.nicol = profiles.Profile(self.driver, 'nicol')
        self.boss = profiles.Profile(self.driver, 'boss')
        self.WDWait = WebDriverWait(self.driver, 10)

    def tearDown(self):
        self.driver.quit()

    @unittest.skipIf(main.is_ios(), "iOS")
    def test_invalid_inputs(self):
        """ test_business.py:TestDetails.test_invalid_inputs """
        # assert 'details' page handles invalid input correctly
        lobby_page = self.nicol.lobby_page
        add_page = self.nicol.add_business_page
        details_page = self.nicol.business_details_page
        self.assertTrue(self.nicol.login(self.driver), messages.login)

        self.assertTrue(lobby_page.on())
        lobby_page.menu.add_a_business()

        self.assertTrue(add_page.on())
        self.assertFalse(add_page.has_horizontal_scroll())
        add_page.click_cant_find()

        self.assertTrue(details_page.on())
        self.assertFalse(details_page.has_horizontal_scroll())
        # TODO assert ein input doesn't allow characters or symbols
        details_page.set('ein', '556787898')
        details_page.set('business_name', "Test Business")
        details_page.set('line1', "2093 Main Street")
        details_page.set('city', "Winslow")
        details_page.set('state', "Arizona")
        details_page.set('postal_code', "72561")
        details_page.set('phone', "622-746-4454")
        details_page.toggle_agree()
        self.assertTrue(details_page.agreed())

        invalid_emails = ['invalid', 'invalid@', 'invalid.com']
        error = "Invalid email address"
        tag = 'p'
        for email in invalid_emails:
            details_page.set('hr_email', email)
            details_page.click_continue()
            time.sleep(2)
            self.assertEqual(
                1, details_page.number_of_elements_containing(tag, error))
        details_page.set('hr_email', '*****@*****.**')
        details_page.set('postal_code', '123456789012345678901')
        details_page.click_continue()
        error = "Expected Zip Code format: 12345 or 12345-1234."
        tag = 'p'
        self.assertEqual(1, details_page.number_of_elements(tag, error))
        details_page.set('postal_code', '98052')
        self.assertEqual(0, details_page.number_of_elements(tag, error))
        invalid_phones = ['1234567890', '801123456']
        for phone in invalid_phones:
            details_page.set('phone', phone)
            details_page.click_continue()
            error = " is not a valid phone number in US."
            #print(details_page.driver.find_element_by_id('phone_cont').text)
            #raw_input('did i get error text?')
            #self.WDWait.until(lambda x: error in details_page.driver.find_element_by_id("phone_cont").text)
            time.sleep(.5)  # Hangs up on '801123456' error.
            self.assertEqual(
                1, details_page.number_of_elements_containing(tag, error))

    def test_required_fields(self):
        """ test_business.py:TestDetails.test_required_fields """
        # assert 'Details' page inputs are required as expected
        # start and end test w/ Nintendo as current business
        lobby_page = self.boss.lobby_page
        emp_page = self.boss.employee_page
        add_page = self.boss.add_business_page
        details_page = self.boss.business_details_page
        settings_page = self.boss.business_settings_page
        prefilled_page = self.boss.business_prefilled_page
        eHome = self.boss.eHome_page
        emp_page = self.boss.employee_page
        default_business = 'Nintendo of Guatemala'
        new_busName = 'Nintendo of the Multiverse'
        self.assertTrue(self.boss.login(self.driver), messages.login)

        try:
            self.assertTrue(lobby_page.on())
        except Exception:  # Doesn't have business selected
            self.assertTrue(eHome.on())
            eHome.menu.set_role('employer')
            self.assertTrue(lobby_page.on())

        self.WDWait.until_not(
            EC.presence_of_element_located((By.CLASS_NAME, 'animated')))
        lobby_page.menu.add_a_business()

        self.assertTrue(add_page.on())
        add_page.click_cant_find()

        self.assertTrue(details_page.on())
        details_page.click_continue()
        self.assertTrue(details_page.on())

        tag = 'p'
        error = 'Required'
        error_count = details_page.number_of_elements
        details_page.set('ein', '556787898')
        details_page.set('hr_email', '')
        details_page.click_continue()
        # Won't find 'Required' error for Terms checkbox (in <div>, not <p>)
        self.assertEqual(6, error_count(tag, error))
        details_page.set('business_name', new_busName)
        details_page.click_continue()
        self.assertEqual(5, error_count(tag, error))
        details_page.set('line1', '4600 150th Avenue Northeast')
        details_page.click_continue()
        self.assertEqual(4, error_count(tag, error))
        details_page.set('city', 'Redmond')
        details_page.click_continue()
        self.assertEqual(3, error_count(tag, error))

        details_page.set('state', 'Washington')
        # Failed on next line because it thought state was 'Required'...
        self.assertEqual('Washington', details_page.get('state'))
        details_page.set('state', "Nevada")
        self.assertEqual('Nevada', details_page.get('state'))
        details_page.click_continue()

        self.assertEqual(3, error_count(tag, error))
        details_page.set('postal_code', '98052')
        details_page.click_continue()
        self.assertEqual(2, error_count(tag, error))
        details_page.set('phone', '(425) 882-2040')
        details_page.click_continue()
        self.assertEqual(1, error_count(tag, error))
        self.assertEqual(1, error_count('div', error))
        details_page.toggle_agree()
        self.assertTrue(details_page.agreed())
        self.assertEqual(1, error_count(tag, error))
        details_page.click_continue()
        self.assertEqual(0, error_count('div', error))
        details_page.set('hr_email', "*****@*****.**")
        details_page.click_continue()

        self.assertTrue(lobby_page.on())

        # Loop to remove all instances of particular business
        has_business = lobby_page.menu.has_business(new_busName)
        while has_business:
            # make sure business is selected
            if lobby_page.menu.get_current_business() != new_busName:
                lobby_page.menu.select_business(new_busName)
                self.assertTrue(lobby_page.on())

            # remove business
            lobby_page.menu.click_option('business settings')
            self.assertTrue(settings_page.on())
            settings_page.remove_business("REMOVE " + new_busName)

            # change role
            self.assertTrue(eHome.on())
            eHome.menu.set_role('employer')
            self.assertTrue(lobby_page.on())

            self.WDWait.until_not(
                EC.presence_of_element_located((By.CLASS_NAME, 'animated')))
            # check if another instance of business
            has_business = lobby_page.menu.has_business(new_busName)

        # done removing business. Select default business
        self.assertFalse(lobby_page.menu.has_business(new_busName))
        lobby_page.menu.select_business(default_business)
        self.assertTrue(lobby_page.on())
Beispiel #28
0
 def set_account(self, number):
     self.account_number.clear()
     self.account_number.send_keys(number)
     if main.is_ios():
         self.account_number.click()
Beispiel #29
0
 def set_email(self, email):
     self.email_input.clear()
     self.email_input.send_keys(email)
     if main.is_ios():
         self.email_input.send_keys('')