Skip to content

application.py #37

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
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
31 changes: 31 additions & 0 deletions HW2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from time import sleep

from selenium import webdriver
from selenium.webdriver.common.by import By
import time



driver_path = ChromeDriverManager().install()

# init driver
driver = webdriver.Edge()

driver.get("https://www.target.com/")

driver.find_element(By.XPATH, "//span[@class='styles__LinkText-sc-1e1g60c-3 dZfgoT h-margin-r-x3']").click()

driver.find_element(By.XPATH, "//a[@data-test='accountNav-signIn' and @href='/account']").click()

sleep(4)

driver.find_element(By.ID, 'login').text
expected_result = 'Sign into your Target account'
actual_result = driver.find_element(By.XPATH, "//h1[@class='styles__StyledHeading-sc-1xmf98v-0 styles__AuthHeading-sc-kz6dq2-2 jhKFiw kcHdEa']").text
assert expected_result == actual_result, f'Expected "{expected_result}" but got "{actual_result}"'

print("Test Passed")
28 changes: 28 additions & 0 deletions Locators for Google.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
from selenium import webdriver
from selenium.webdriver.common.by import By

# init driver
driver = webdriver.Chrome()

# By ID
driver.find_element(By.ID, 'twotabsearchtextbox')

# By Xpath
driver.find_element(By.XPATH, "//a[@href='/ref=nav_logo']")
driver.find_element(By.XPATH, "//input[@aria-label='Search']")
driver.find_element(By.XPATH, "//input[@name='field-keywords']")

# By Xpath, multiple attributes
driver.find_element(By.XPATH, "//input[@tabindex='0' and @aria-label='Search']")
driver.find_element(By.XPATH, "//input[@tabindex='0' and @aria-label='Search' and @another_attribute....]")

# By Xpath, text
driver.find_element(By.XPATH, "//h2[text()='Deals on overstock items']")
driver.find_element(By.XPATH, "//a[text()='Best Sellers' and @data-csa-c-content-id='nav_cs_bestsellers']")

# By Xpath, partial attribute
driver.find_element(By.XPATH, "//a[contains(@href, 'nav_cs_bestsellers')]")
driver.find_element(By.XPATH, "//span[contains(text(), 'BELLA 21 Piece Cook Bake')]") # by partial text

# By Xpath, multiple nodes
driver.find_element(By.XPATH, "//div[@id='nav-xshop-container']//a[contains(@href, 'bestsellers')]")
19 changes: 19 additions & 0 deletions amazon_search.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
from selenium.webdriver.common.by import By
from behave import given, when, then


@given('Open Amazon page')
def open_amazon(context):
context.driver.get('https://www.amazon.com/')


@when('Search for {search_word} on amazon')
def search_product(context, search_word):
context.driver.find_element(By.ID, 'twotabsearchtextbox').send_keys(search_word)
context.driver.find_element(By.ID, 'nav-search-submit-button').click()


@then('User sees results for {expected_result}')
def verify_search_results(context, expected_result):
actual_result = context.driver.find_element(By.XPATH, "//span[@class='a-color-state a-text-bold']").text
assert expected_result == actual_result, f'Expected {expected_result} but got {actual_result}'
Empty file added app/__init__.py
Empty file.
18 changes: 18 additions & 0 deletions app/application.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from pages.base_page import Page
from pages.bestsellers_page import BestsellersPage
from pages.main_page import MainPage
from pages.search_results_page import SearchResultsPage
from pages.target_help_page import TargetHelpPage
from pages.target_sign_in import TargetSignIn


class Application:

def __init__(self, driver):
self.driver = driver
self.bestsellers_page = BestsellersPage(self.driver)
self.main_page = MainPage(self.driver)
self.search_results_page = SearchResultsPage(self.driver)
self.base_page = Page(self.driver)
self.target_help_page = TargetHelpPage(self.driver)
self.target_sign_in = TargetSignIn(self.driver)
34 changes: 34 additions & 0 deletions css_selectos.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
from selenium import webdriver
from selenium.webdriver.common.by import By

# init driver
driver = webdriver.Chrome()

# By ID
driver.find_element(By.ID, 'twotabsearchtextbox')

# By CSS, ID
driver.find_element(By.CSS_SELECTOR, '#twotabsearchtextbox')
driver.find_element(By.CSS_SELECTOR, 'input#twotabsearchtextbox')

# By CSS, class(es)
driver.find_element(By.CSS_SELECTOR, 'span.icp-nav-flag-us')
driver.find_element(By.CSS_SELECTOR, 'span.icp-nav-flag.icp-nav-flag-us')
# by class, without a tag
driver.find_element(By.CSS_SELECTOR, '.icp-nav-flag')

# By CSS, attributes
driver.find_element(By.CSS_SELECTOR, "a[href='/gp/help/customer/display.html/ref=ap_signin_notification_condition_of_use?ie=UTF8&nodeId=508088']")
# partial match
driver.find_element(By.CSS_SELECTOR, "a[href*='ap_signin_notification_condition_of_use']")
driver.find_element(By.CSS_SELECTOR, "input[type='email'][name='email'][maxlength='128']")
# mix of ids, classes, attributes:
driver.find_element(By.CSS_SELECTOR, "input#ap_email[type='email']")
driver.find_element(By.CSS_SELECTOR, "input#ap_email.auth-autofocus.a-input-text[type='email']")

# by multiple nodes
driver.find_element(By.CSS_SELECTOR, "ul.hmenu-visible li a[href*='new-releases']")


driver.find_element(By.XPATH, "//div[@class='nav-search-facade' and .//span[@id='nav-search-label-id']]")

78 changes: 70 additions & 8 deletions features/environment.py
Original file line number Diff line number Diff line change
@@ -1,34 +1,96 @@
import allure
from allure_commons.types import AttachmentType
from app.application import Application

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support.events import EventFiringWebDriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

from support.logger import logger, MyListener

# Allure command:
# behave -f allure_behave.formatter:AllureFormatter -o test_results/ features/tests/product_page.feature


def browser_init(context):
def browser_init(context, my_test_name):
"""
:param context: Behave context
:param my_test_name: scenario.name
"""
driver_path = ChromeDriverManager().install()
service = Service(driver_path)
context.driver = webdriver.Chrome(service=service)
# service = Service('/Users/svetlanalevinsohn/JobEasy/13-python-selenium-automation/chromedriver')
# service = Service('/Users/svetlanalevinsohn/JobEasy/12-python-selenium-automation/geckodriver')
# context.driver = webdriver.Chrome(service=service)
# context.driver = webdriver.Firefox(service=service)
# context.driver = webdriver.Safari()

context.driver.maximize_window()
## HEADLESS MODE ####
# options = webdriver.ChromeOptions()
# options.add_argument('--headless')
# context.driver = webdriver.Chrome(
# chrome_options=options,
# service=service
# )

### EventFiringWebDriver - log file ###
### for drivers ###
# context.driver = EventFiringWebDriver(
# webdriver.Chrome(service=service),
# MyListener()
# )
# for headless mode ###
# context.driver = EventFiringWebDriver(webdriver.Chrome(chrome_options = options), MyListener())

# for browerstack ###
# Register for BrowserStack, then grab it from https://www.browserstack.com/accounts/settings
bs_user = 'matthieugeorgesj_JtmSUb'
bs_key = 'uwqnNujyqfKizxyATGws'

desired_cap = {
'browser': 'Safari',
'os': 'OS X',
'os_Version': 'Big Sur',
'name': 'test_name'
}

from selenium.webdriver.chrome.options import Options as ChromeOptions
options = ChromeOptions()
options.browser_version = '92'
options.platform_name = 'Windows 11'
cloud_options = {}
cloud_options['build'] = 'my_test_build'
cloud_options['name'] = my_test_name
options.set_capability('cloud:options', cloud_options)


url = f'http://{bs_user}:{bs_key}@hub-cloud.browserstack.com/wd/hub'
context.driver = webdriver.Remote(url, options=options)

context.driver.maximize_window()
context.driver.implicitly_wait(4)
context.driver.implicitly_wait(5)
context.driver.wait = WebDriverWait(context.driver, 10)

context.app = Application(context.driver)


def before_scenario(context, scenario):
print('\nStarted scenario: ', scenario.name)
browser_init(context)
logger.info(f'Started scenario: {scenario.name}')
browser_init(context, scenario.name)


def before_step(context, step):
print('\nStarted step: ', step)
logger.info(f'Started step: {step}')


def after_step(context, step):
if step.status == 'failed':
logger.error(f'Step failed: {step}')
print('\nStep failed: ', step)
# Mark test case as FAILED on BrowserStack:
# context.driver.execute_script(
# 'browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed", "reason": "Step failed"}}')


def after_scenario(context, feature):
Expand Down
108 changes: 108 additions & 0 deletions features/steps/Algorithms.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
# algo 1!!!!
# def sumofdigits(n):
# result = 0
# num = n % 10
# result = result + num
# n = n // 10
# num = n % 10
# result = result + num
# n = n // 10
# result = result + n
#
#
#
# print(result)
#
#
# sumofdigits(521)
#
# def maxnum(n):
# result = [124, 21, 32]
# result = max(result)
# print(result)
#
# maxnum(1)
#
# algo 2!!!!
# def split(n):
# if len(n) % 2 == 0:
# split = int(len(n) / 2)
# c = int(split)
# h1 = (n[c:])
# h2 = (n[:c])
# h3 = ''.join([h1, h2])
# print(h3)
# else:
# split = int(len(n) / 2)
# c = int(split + 1)
# h1 = (n[c:])
# # h2 = (n[:c])
# h4 = ''.join([h1, h2])
#
# print(split)
# print(h1)
# print(h2)
# print(h3)
# print(h4)
#
#
# split('oda') #ado
#
# def unique(n):
# seen = set()
# uniq = []
# for x in n:
# uniq.append(x)
# seen.add(x)
# u = len(uniq)
# s = len(seen)
# if u == s:
# print("True")
# else: print("False")
#
#
# unique('fuisr')
#
#
# algo 3!!!!
# def arithmetica(num_list):
# mean = sum(num_list)/len(num_list)
# num_list = [i for i in num_list if i <= mean]
# return num_list
#
#
# cat = [1, 3, 5, 6, 4, 10, 2, 3]
# print(arithmetica(cat))
#
#
# def low(n):
# n.sort()
# return n[0:2]
#
#
# kat = [198, 3, 4, 9, 10, 9, 2]
# print(low(kat))


#algo 4!!!!
# def even_1st(list):
# list = (sorted(list, key=lambda x: [x % 2, x]))
# print(list)
#
#
# o = [7, 9, 3, 5, 6, 4, 10, 3, 2]
# even_1st(o)


def Increment(num):
str(num)
for i in num:
d = 0 + i
print(d)


f = [1, 8, 9]
Increment(f)

h = ["a", "b", "c"]

32 changes: 32 additions & 0 deletions features/steps/Extras HW.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
from selenium.webdriver.common.by import By
from behave import given, when, then
from time import sleep
from pages.base_page import Page
from selenium.webdriver.support import expected_conditions as EC

product_info = (By.CSS_SELECTOR, 'a[data-test="product-title"]')
bestsellers = (By.CSS_SELECTOR, '#zg_header a')
banner = (By.CSS_SELECTOR, 'span#zg_banner_text')


@then('Verify product names and images displays')
def verify_product(context):
context.driver.wait.until(EC.presence_of_all_elements_located(product_info))


@when('Click headers')
def click_headers(context):
sleep(10)
top_links = context.driver.find_elements(*bestsellers)
print(top_links)

for i in range(len(top_links)): # for x from 0 to 4
link_to_click = context.driver.find_elements(*bestsellers)[i]
link_text = link_to_click.text
link_to_click.click()
header_text = context.driver.find_element(*banner).text
assert link_text in header_text, f'Expected {link_text} to be in {header_text}'




Loading