Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
File renamed without changes.
35 changes: 35 additions & 0 deletions Application/application.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
from Pages.base_page import BasePage
from Pages.Main_page import MainPage
from Pages.header import HeaderPage
from Pages.cart_messages import Cart
from Pages.search_results_page import SearchResultsPage
from Pages.chips_page import ChipsPage
from Pages.sign_in import SignPage
from Pages.terms_conditions_page import TermsConditionsPage
from Pages.target_help_page import TargetHelpPage




class Application:
def __init__(self, driver):
self.driver = driver
self.base_page=BasePage(driver)
self.Main_page=MainPage(driver)
self.header_page=HeaderPage(driver)
self.search_results_page=SearchResultsPage(driver)
self.cart_messages=Cart(driver)
self.chips_page = ChipsPage(driver)
self.sign_in=SignPage(driver)
self.terms_conditions_page=TermsConditionsPage(driver)
self.target_help_page=TargetHelpPage(driver)










8 changes: 8 additions & 0 deletions Pages/Main_page.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from Pages.base_page import BasePage

class MainPage(BasePage):

def open_main_page(self):
self.open_url('www.target.com')


File renamed without changes.
86 changes: 86 additions & 0 deletions Pages/base_page.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


class BasePage:

def __init__(self, driver):
self.driver = driver
self.wait = WebDriverWait(driver, 15)

def open_url(self,url):
self.driver.get(url)

def get_url(self):
return self.driver.current_url()

def click(self,*locator):
self.driver.find_element(*locator).click()

def find_element(self,*locator):
return self.driver.find_element(*locator)

def input_text(self,text,*locator):
self.driver.find_element(*locator).send_keys(text)

def get_current_window_handle(self):
return self.driver.current_window_handle()

def switch_to_new_window(self):
self.wait.until(EC.new_window_is_opened())
all_windows = self.driver.window_handles
print('All windows: ', all_windows)
self.driver.switch_to.window(all_windows[1])
print('Current window: ', self.driver.current_window_handle)

def switch_to_original_window(self,window_id):
self.driver.switch_to.window(window_id)
print("Current Window: ", self.driver.current_window_handle)

def select_topic(self, option_value):
dd = self.find_element(*self.option_value)
select = Select(dd)
select.select_by_value(option_value)


def wait_for_element_visible(self, locator):
return self.wait.until(EC.visibility_of_element_located(locator),
message=f'Element by {locator} not visible')

def wait_for_element_invisible(self, locator):
self.wait.until(
EC.invisibility_of_element_located(locator),
message=f'Element by {locator} should not be visible'
)

def wait_for_element_clickable(self, locator):
return self.wait.until(
EC.element_to_be_clickable(locator),
message=f'Element by {locator} not clickable'
)

def wait_and_click(self,locator):
self.wait.until(
EC.element_to_be_clickable(locator),
message=f'Element by {locator} not clickable'
).click()

def verify_partial_text(self, expected_text, *locator):
actual_text = self.find_element(*locator).text
assert expected_text in actual_text, f'Expected {expected_text} not in actual {actual_text}'

def verify_text(self, expected_text, *locator):
actual_text = self.find_element(*locator).text
assert expected_text == actual_text, f'Expected {expected_text}, but got {actual_text}'

def verify_partial_url(self, expected_url):
actual_url = self.driver.current_url
assert expected_url in actual_url, f'Expected partial url {expected_url} not in actual {actual_url}'

def verify_url(self, expected_url):
actual_url = self.driver.current_url
assert expected_url == actual_url, f'Expected url {expected_url} does not match actual {actual_url}'

def close(self):
self.driver.close()
24 changes: 24 additions & 0 deletions Pages/cart_messages.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from selenium.webdriver.common.by import By
from time import sleep
from Pages.base_page import BasePage

class Cart(BasePage):
CART_ICON = By.CSS_SELECTOR,"div[data-test='@web/CartIcon']"
MESSAGE = By.CSS_SELECTOR,"div[data-test='boxEmptyMsg']"
PRODUCT_IN_CART = By.XPATH, "//span[text()='$6.69 subtotal']"

def click_cart(self,*locator):
self.click(*self.CART_ICON)
sleep(5)

def verify_message(self,*locator):
self.find_element(*self.MESSAGE)

def product_in_cart(self,*locator):
self.find_element(*self.PRODUCT_IN_CART)






10 changes: 10 additions & 0 deletions Pages/chips_page.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from Pages.base_page import BasePage
from selenium.webdriver.common.by import By
from time import sleep

class ChipsPage(BasePage):

ADD_TO_CART_ON_CHIPS_PAGE = By.CSS_SELECTOR, "[aria-label='Add Doritos Nacho Cheese Flavor Party Size Tortilla Chips - 14.5oz to cart']"

def click_add_to_cart(self ,*locator):
self.click(*self.ADD_TO_CART_ON_CHIPS_PAGE)
67 changes: 67 additions & 0 deletions Pages/header.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
from selenium.webdriver import Keys

from Pages.base_page import BasePage
from selenium.webdriver.common.by import By
from time import sleep

class HeaderPage(BasePage):

SEARCH_BAR=By.CSS_SELECTOR, "[data-test='@web/Search/SearchInput']"
SEARCH_BTN=By.CSS_SELECTOR, "[data-test='@web/Search/SearchButton']"
SIGN_IN_BUTTON = By.CSS_SELECTOR,"[aria-label='Account, sign in']"
SIDE_NAV_SIGN_IN = By.CSS_SELECTOR,"[data-test='accountNav-signIn']"
SIGN_IN_MESSAGE = By.CSS_SELECTOR, "//span[text()='Sign into your Target account']"
CATEGORIES_BTN =By.CSS_SELECTOR,"[aria-label='Categories']"
GROCERY_BTN = By.CSS_SELECTOR,"[data-url='/c/grocery/-/N-5xt1a']"
SNACK_BTN = By.CSS_SELECTOR,"[data-url='/c/snacks-grocery/-/N-5xsy9']"
CHIPS_BTN = By.CSS_SELECTOR, "[data-url='/c/chips-snacks-grocery/-/N-5xsy7']"
ADD_TO_CART_SIDE_NAV_PAGE = By.CSS_SELECTOR, "[data-test='orderPickupButton']"
VIEW_CART = By.CSS_SELECTOR, "[href='/cart']"

def click_category(self,*locator):
self.click(*self.CATEGORIES_BTN)


def click_grocery(self,*locator):
self.click(*self.GROCERY_BTN)


def click_snacks(self,*locator):
self.click(*self.SNACK_BTN)


def click_chips(self,*locator):
self.click(*self.CHIPS_BTN)


def click_add_to_side(self,*locator):
self.click(*self.ADD_TO_CART_SIDE_NAV_PAGE)


def click_view_cart(self,*locator):
self.click(*self.VIEW_CART)


def search_bar(self,product,*locator):
self.input_text(product,*self.SEARCH_BAR).send_keys(product)
self.click(*self.SEARCH_BTN)
sleep(10)


def sign_in(self,*locator):
self.click(*self.SIGN_IN_BUTTON)
sleep(5)


def side_nav_sign_in(self,*locator):
self.click(*self.SIDE_NAV_SIGN_IN)
sleep(5)


def verify_sign_in_page(self,expected_text,*locator):
self.verify_text('Sign into your Target account',*self.SIGN_IN_MESSAGE)





36 changes: 36 additions & 0 deletions Pages/help_page.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
from selenium.webdriver.common.by import By
from Pages.base_page import BasePage


# #class HelpPage(BasePage):
# TOPIC_SELECTION_DD = (By.CSS_SELECTOR, "select[id*='ViewHelpTopics']")
# HEADER = (By.XPATH, "//h1[text()=' {SUBSTRING}']")
#
# def _get_header_locator(self, header):
# # HEADER (By.XPATH, "//h1[text()=' {SUBSTRING}']") => (By.XPATH, "//h1[text()=' Returns']")
# return [self.HEADER[0], self.HEADER[1].replace('{SUBSTRING}', header)]
#
#
# def open_help_page(self):
# self.open_url("https://help.target.com/help/SubCategoryArticle?childcat=Returns&parentcat=Returns+%26+Exchanges")
#
#
# def choose_topic(self):
# self.select_topic(*self.TOPIC_SELECTION_DD)
#
#
# def verify_target_help_page_opened(self):
# self.verify_url("https://help.target.com/help/SubCategoryArticle?childcat=Returns&parentcat=Returns+%26+Exchanges")
#
#
# def verify_topic_page_opened(self,header):
# locator = self._get_header_locator(header)
# print(locator)
# self.wait_for_element_visible(locator)







9 changes: 9 additions & 0 deletions Pages/search_results_page.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from selenium.webdriver.common.by import By
from Pages.base_page import BasePage

class SearchResultsPage(BasePage):
SEARCH_RESULT=By.CSS_SELECTOR, "[data-test='resultsHeading']"

def verify_search_results(self,product):
actual_result = self.find_element(*self.SEARCH_RESULT).text
assert product in actual_result, f'Expected result {product} not in {actual_result}'
42 changes: 42 additions & 0 deletions Pages/sign_in.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
from Pages.base_page import BasePage
from selenium.webdriver.common.by import By
from time import sleep


class SignPage(BasePage):
Terms_conditions = (By.XPATH,"//a[contains(text(),'Terms')]")
EMAIL = (By.CSS_SELECTOR, "#username")
CONTINUE = (By.CSS_SELECTOR, "#login" )
PASSWORD = (By.CSS_SELECTOR, "#password")
SIGN_IN = (By.CSS_SELECTOR, "#login")
ERROR = (By.CSS_SELECTOR, "#password--ErrorMessage")


def open_sign_in(self):
self.open_url('https://www.target.com/login?client_id=ecom-web-1.0.0&ui_namespace=ui-default&back_button_action=browser&keep_me_signed_in=true&kmsi_default=false&actions=create_session_request_username')

def enter_email(self):
self.input_text("katie@gmail.com ",*self.EMAIL)

def click_continue(self):
self.click(*self.CONTINUE)

def enter_password(self):
self.input_text("password",*self.PASSWORD)

def click_sign_in(self):
self.click(*self.SIGN_IN)

def click_terms(self):
self.click(self.Terms_conditions)

def verify_terms_opened(self):
self.verify_partial_url('terms-conditions')

def verify_error_message(self):
self.verify_text("Please enter a valid password",*self.ERROR)





29 changes: 29 additions & 0 deletions Pages/target_help_page.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
from Pages.base_page import BasePage
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from time import sleep

class TargetHelpPage(BasePage):
DD = (By.CSS_SELECTOR, "[name='j_id0:contentTemplate:j_id79:j_id80:viewHelpTopics:ViewHelpTopics']")

def open_target_help_page(self):
self.open_url("https://help.target.com/help/SubCategoryArticle?childcat=Returns&parentcat=Returns+%26+Exchanges")
sleep(5)

def verify_help_page_opened(self):
self.verify_url("https://help.target.com/help/SubCategoryArticle?childcat=Returns&parentcat=Returns+%26+Exchanges")

def select_topic_target_help_page(self):
dropdown = self.find_element(*self.DD)
select = Select(dropdown)
select.select_by_value('Orders & Purchases')
sleep(5)

def verify_orders_and_purchases_opened(self):
self.verify_url("https://help.target.com/help/SubCategoryArticle?childcat=Print+a+receipt&parentcat=Orders+%26+Purchases&searchQuery=")






10 changes: 10 additions & 0 deletions Pages/terms_conditions_page.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from Pages.base_page import BasePage
from selenium.webdriver.common.by import By
from time import sleep

class TermsConditionsPage(BasePage):

def verify_terms(self):
self.verify_partial_text('terms-conditions')


2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@
written in
### Python 3, Behave
https://www.careerist.com/automation

poop
Loading