Implement home page scenario

This commit is contained in:
Mat Hare 2021-07-10 21:02:01 +01:00
parent 329003e664
commit 0176973a49
4 changed files with 38 additions and 18 deletions

View File

@ -55,7 +55,7 @@ def browser(config):
b.quit()
@pytest.fixture()
@pytest.fixture
def datatable():
return DataTable()
@ -77,7 +77,6 @@ class DataTable(object):
@given(parsers.parse('I have navigated to the \'the-internet\' "{page_name}" page'), target_fixture='navigate_to')
def navigate_to(browser, page_name):
BASE_URL = "https://the-internet.herokuapp.com"
PAGE_URLS = {
@ -89,7 +88,9 @@ def navigate_to(browser, page_name):
"inputs": BASE_URL + "/inputs",
"secure area": BASE_URL + "/secure"
}
browser.get(PAGE_URLS.get(page_name.lower()))
url = PAGE_URLS.get(page_name.lower())
browser.get(url)
return url
@then(parsers.parse('a "{text}" banner is displayed in the top-right corner of the page'))
@ -108,10 +109,12 @@ def verify_banner_text(browser, text):
if attr.startswith("border"):
assert "0px" == attr.split(": ")[1]
@then(parsers.parse('the page has a footer containing "{text}"'))
def verify_footer_text(browser, text):
assert text == BasePage(browser).get_page_footer_text()
assert text == BasePage(browser).get_page_footer_text()
@then(parsers.parse('the link in the page footer goes to "{url}"'))
def verify_footer_link_url(browser, url):
assert url == BasePage(browser).get_page_footer_link_url()
assert url == BasePage(browser).get_page_footer_link_url()

View File

@ -57,13 +57,13 @@ Feature: Home Page
And the page has a footer containing "Powered by Elemental Selenium"
And the link in the page footer goes to "http://elementalselenium.com/"
# Scenario Outline: Open <page> page
# When I click on the "<page>" link
# Then the "<page>" page opens
# Examples:
# | page |
# | Checkboxes |
# | Dropdown |
# | Dynamic Controls |
# | Form Authentication |
# | Inputs |
Scenario Outline: Open <page> page
When I click on the "<page>" link
Then the "<page>" page opens
Examples:
| page |
| Checkboxes |
| Dropdown |
| Dynamic Controls |
| Form Authentication |
| Inputs |

View File

@ -9,11 +9,17 @@ class HomePage(BasePage):
def PAGE_TITLE(self):
return (By.TAG_NAME, 'h1')
SUBHEADER = (By.TAG_NAME, 'h2')
SUBPAGE_LINKS = (By.XPATH, '//*[@id="content"]/ul/li')
SUBPAGE_LINKS = (By.XPATH, '//*[@id="content"]/ul/li/a')
def __init__(self, browser):
self.browser = browser
def click_page_link(self, page_name):
links = self.browser.find_elements(*self.SUBPAGE_LINKS)
for link in links:
if link.text.startswith(page_name):
link.click()
def get_page_title_text(self):
return self.browser.find_element(*self.PAGE_TITLE).text
@ -23,4 +29,7 @@ class HomePage(BasePage):
def get_subpage_list(self):
links = self.browser.find_elements(*self.SUBPAGE_LINKS)
titles = [link.text.split(" (")[0] for link in links]
return titles
return titles
def get_current_url(self):
return self.browser.current_url

View File

@ -1,9 +1,13 @@
from pytest_bdd import scenarios, given, when, then, parsers
from pytest_bdd import scenarios, when, then, parsers
from pages.home import HomePage as page
from sttable import parse_str_table
from pages.base import BasePage
scenarios('../features/home_page.feature')
@when(parsers.parse('I click on the "{page_name}" link'))
def click_page_link(browser, page_name):
page(browser).click_page_link(page_name)
@then(parsers.parse('the page title is "{title}"'))
def verify_page_title(browser, title):
@ -20,3 +24,7 @@ def verify_subpage_list(browser, datatable, subpages):
expected = parse_str_table(subpages)
for field in expected.fields:
assert expected.columns[field] == page(browser).get_subpage_list()
@then(parsers.parse('the "{page_name}" page opens'))
def verify_page_opens(browser, page_name, navigate_to):
assert navigate_to == page(browser).get_current_url()