from selenium.webdriver.common.by import By from ui_tests.ui_mixins import NavbarMixin from browser_fixture import BaseBrowser, setup_pytest_browser_fixture class AppearnceTestBrowser(NavbarMixin, BaseBrowser): pass browser = setup_pytest_browser_fixture(AppearnceTestBrowser) def test_viewport_info_used_for_responsive_css(browser): # she sees the sign up button browser.set_window_size(1200, 800) browser.get_slow_loading_clickable(By.CSS_SELECTOR, 'button.navbar-buttons__user-signup-btn') # she resizes her screen to be smaller browser.set_window_size(10, 10) # she does not see the signup button browser.assert_is_not_visible(By.CSS_SELECTOR, 'button.navbar-buttons__user-signup-btn')
import pytest from browser_fixture import BaseBrowser, setup_pytest_browser_fixture # sometimes this fixture will be overridden with new browser using # BaseBrowser + Mixins browser = setup_pytest_browser_fixture(BaseBrowser) @pytest.yield_fixture() def normal_user(django_user_model): user = django_user_model.objects.create(username='******') user.set_password('password') user.save() yield user # do i need this? maybe if we don't kill db between tests? user.delete()
from selenium.webdriver.common.keys import Keys from ui_mixins import NavigationMixin, NavbarMixin from browser_fixture import BaseBrowser, setup_pytest_browser_fixture class MenuPageBrowser(NavigationMixin, NavbarMixin, BaseBrowser): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.from_intro_page_select_menu('Demo Menu 0') browser = setup_pytest_browser_fixture(MenuPageBrowser) def test_has_menu_name_in_navbar(browser): navbar_title = browser.get_navbar_title_btn() assert navbar_title.text == 'Demo Menu 0' def test_has_menu_image(browser): image = browser.find_element_by_tag_name('img') assert image.get_attribute('alt') == 'menu image' def test_has_chef_name_and_description(browser): assert 'cuckoo lis' in browser.body_text assert 'description 0' in browser.body_text def test_has_correct_navigation_buttons(browser):
from ui_mixins import NavbarMixin from browser_fixture import BaseBrowser, setup_pytest_browser_fixture class UnknownUrlBrowser(NavbarMixin, BaseBrowser): pass browser = setup_pytest_browser_fixture(UnknownUrlBrowser) def test_future_links_routes_to_under_construction(browser): # alisa goes to a work-in-progress url browser.goto('/work-in-progress/') # under-construction page is shown assert 'This page is under construction' in browser.body_text assert 'iChef' in browser.body_text def test_unknown_urls_routes_to_not_found(browser): # alisa randomly enters jibberish as url browser.goto('/random-url/') # not-found page is shown assert 'Nothing to see here' in browser.body_text assert 'iChef' in browser.body_text
from ui_mixins import AuthenticationMixin from browser_fixture import BaseBrowser, setup_pytest_browser_fixture class LoginPageBrowser(AuthenticationMixin, BaseBrowser): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.find_element_by_xpath('//button[text()="Log in"]').click() browser = setup_pytest_browser_fixture(LoginPageBrowser) def test_has_login_form(browser): # alisa goes to login page, sees a form login_form = browser.find_element_by_tag_name('form') # she's asked to enter her email and pw email_node = login_form.find_element_by_xpath( './/label[contains(., "Email address:")]') email_node.find_element_by_tag_name('input') pw_node = login_form.find_element_by_xpath( './/label[contains(., "Password:")]') pw_node.find_element_by_tag_name('input') # she also sees a link to reset pw login_form.find_element_by_link_text('Forgot password?')
import pytest from browser_fixture import setup_pytest_browser_fixture from constants import OFFLINE from ui_mixins import NavigationMixin, NavbarMixin, PaypalMixin from browser_fixture import BaseBrowser class ResPageBrowser(PaypalMixin, NavigationMixin, NavbarMixin, BaseBrowser): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.from_intro_page_select_menu('Demo Menu 0') self.from_menu_page_fill_form_and_submit('3 ~ 4', '09122016') browser = setup_pytest_browser_fixture(ResPageBrowser) def test_ordered_menu_is_shown(browser): browser.assert_on_page('reservation') order_summary = { 'Number of guests': '3 ~ 4', 'Time': '09122016', 'Menu': 'Demo Menu 0' } for label, content in order_summary.items(): assert label in browser.body_text assert content in browser.body_text def test_has_back_btn_to_menu_page(browser):
from selenium.webdriver.support.ui import Select from ui_mixins import OrderAttributesMixin, NavigationMixin, NavbarMixin, MenuListMixin from browser_fixture import BaseBrowser, setup_pytest_browser_fixture class IntroPageBrowser(NavigationMixin, MenuListMixin, NavbarMixin, OrderAttributesMixin, BaseBrowser): pass browser = setup_pytest_browser_fixture(IntroPageBrowser) def test_links_to_menu_details(browser): link_menu_details = browser.find_elements_by_class_name('menu-list__item-div') assert len(link_menu_details) == 2 assert 'Demo Menu 0' in link_menu_details[0].text assert 'Demo Menu 1' in link_menu_details[1].text def test_displays_menus_that_go_to_menu_page(browser): # click on first menu detail link browser.click_on_nth_menu(0) assert 'Demo Menu 0' in browser.body_text assert '/menus/0' in browser.current_url browser.back() # click on second menu detail link browser.click_on_nth_menu(1) assert 'Demo Menu 1' in browser.body_text
import pytest from browser_fixture import setup_pytest_browser_fixture from constants import OFFLINE from ui_mixins import NavigationMixin, NavbarMixin, PaypalMixin from browser_fixture import BaseBrowser class ResPageBrowser(PaypalMixin, NavigationMixin, NavbarMixin, BaseBrowser): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.from_intro_page_select_menu('Demo Menu 0') self.from_menu_page_fill_form_and_submit('3 ~ 4', '09122016') browser = setup_pytest_browser_fixture(ResPageBrowser) def test_ordered_menu_is_shown(browser): browser.assert_on_page('reservation') order_summary = { 'Number of guests': '3 ~ 4', 'Time': '09122016', 'Menu': 'Demo Menu 0'} for label, content in order_summary.items(): assert label in browser.body_text assert content in browser.body_text def test_has_back_btn_to_menu_page(browser): browser.find_element_by_xpath('//a/button[text()="Back"]').click()