diff --git a/HW_Selenium9/test_homework.py b/HW_Selenium9/test_homework.py new file mode 100644 index 0000000..e2f166b --- /dev/null +++ b/HW_Selenium9/test_homework.py @@ -0,0 +1,68 @@ +import pytest +from selenium import webdriver +import time +from selenium.webdriver.support.ui import WebDriverWait +from selenium.webdriver.support import expected_conditions as conditions +from selenium.webdriver.common.by import By +from selenium.webdriver.common.keys import Keys + + +class TestOffers: + @pytest.fixture() + def test_setup(self): + global driver + global wait + + driver = webdriver.Chrome(executable_path="./chromedriver.exe") + wait = WebDriverWait(driver,5) + driver.get("https://testkwidos.tk/") + yield + time.sleep(5) + driver.quit() + + def test_offers(self,test_setup): + offers = wait.until(conditions.element_to_be_clickable((By.XPATH,"//*[text()='OFFERS']"))) + offers.click() + servise_type = wait.until(conditions.element_to_be_clickable((By.XPATH, "//*[@class='ui-multiselect-label ui-corner-all']"))) + servise_type.click() + ac_checkbox=driver.find_element_by_xpath("//*[text()='Air conditioning']") + ac_checkbox.click() + dropdown_exit=driver.find_element_by_css_selector(".pi.pi-times") + dropdown_exit.click() + state_drop=driver.find_element_by_xpath("//*[contains(@class,'ng-tns-c22-1 prime-')]") + state_drop.click() + CA=driver.find_element_by_xpath("//span[text()='California']") + CA.click() + result=wait.until(conditions.visibility_of_element_located((By.CSS_SELECTOR, ".card-title.red-shape"))) + color=driver.find_element_by_css_selector(".card-shape__green").value_of_css_property("background") + assert result.text=="house" and "rgb(224, 241, 222)" in color + + def test_state_WY(self, test_setup): + offers = wait.until(conditions.element_to_be_clickable((By.XPATH, "//*[text()='OFFERS']"))) + offers.click() + servise_type = wait.until( + conditions.element_to_be_clickable((By.XPATH, "//*[@class='ui-multiselect-label ui-corner-all']"))) + servise_type.click() + ac_checkbox = wait.until(conditions.element_to_be_clickable((By.XPATH,"//*[text()='Air conditioning']"))) + ac_checkbox.click() + dropdown_exit = driver.find_element_by_css_selector(".pi.pi-times") + dropdown_exit.click() + state_drop = driver.find_element_by_xpath("//*[contains(@class,'ng-tns-c22-1 prime-')]") + state_drop.click() + target=driver.find_element_by_xpath("//span[text()='Wyoming']") + driver.execute_script('arguments[0].scrollIntoView(true);', target) + target.click() + not_found_list = wait.until(conditions.visibility_of_any_elements_located((By.XPATH, "//*[text()='Offers not found']"))) + assert len(not_found_list) == 1 + + def test_scroll_blog(self, test_setup): + blog=wait.until(conditions.element_to_be_clickable((By.XPATH, "//*[text()='BLOG']"))) + blog.click() + time.sleep(2) + target = driver.find_element_by_xpath("//*[contains(text(),'Kwidos is the place')]") + driver.execute_script('arguments[0].scrollIntoView();', target) + assert 'KWIDOS IS THE PLACE' in target.text + + + + diff --git a/HomeWork/some_class.py b/HomeWork/some_class.py new file mode 100644 index 0000000..bcde0df --- /dev/null +++ b/HomeWork/some_class.py @@ -0,0 +1,23 @@ +class SomeClass: + def __init__(self, number, string, another_number): + self.number=number + self.string=string + self.another_number=another_number + + def check_odd_or_even_number(self): + if self.number%2: + return "Odd" + else: + return "Even" + + def sum_number_anotherNumber(self): + return self.number+self.another_number + + def check_CapitalString(self): + chk=False + if self.string[0].isupper(): + chk=True + return chk + + + diff --git a/HomeWork/test_some_class.py b/HomeWork/test_some_class.py new file mode 100644 index 0000000..6083001 --- /dev/null +++ b/HomeWork/test_some_class.py @@ -0,0 +1,19 @@ +from some_class import SomeClass + +def test_check_odd_or_even_number(): + #Arrange + obj1=SomeClass(5, "cat", 11) + #Act + results=obj1.check_odd_or_even_number() + #Assert + assert results=="Odd" + +def test_sum_number_anotherNumber(): + obj2=SomeClass(5, "dog", 4) + results=obj2.sum_number_anotherNumber() + assert results==9 + +def test_check_CapitalString(): + obj3=SomeClass(6, "School", 4) + results=obj3.check_CapitalString() + assert results diff --git a/chromedriver.exe b/chromedriver.exe new file mode 100644 index 0000000..d419a51 Binary files /dev/null and b/chromedriver.exe differ diff --git a/hwselenium11/pageobjects/base_page.py b/hwselenium11/pageobjects/base_page.py new file mode 100644 index 0000000..5c52df7 --- /dev/null +++ b/hwselenium11/pageobjects/base_page.py @@ -0,0 +1,6 @@ +from selenium.webdriver.support.ui import WebDriverWait + +class BasePage: + def __init__(self, driver): + self.driver=driver + self.wait=WebDriverWait(driver, 5) diff --git a/hwselenium11/pageobjects/landing_page.py b/hwselenium11/pageobjects/landing_page.py new file mode 100644 index 0000000..93deb27 --- /dev/null +++ b/hwselenium11/pageobjects/landing_page.py @@ -0,0 +1,31 @@ +from hwselenium11.pageobjects.offers_page import OffersPage +from hwselenium11.pageobjects.base_page import BasePage +from selenium.webdriver.support import expected_conditions as ec +from selenium.webdriver.common.by import By + +class LandingPage(BasePage): + def __init__(self, driver): + super().__init__(driver) + + + @property + def header(self): + return self.driver.find_element_by_xpath("//*[contains(text(), 'connect Construction')]") + + @property + def offers(self): + return self.wait.until(ec.element_to_be_clickable((By.XPATH,"//*[text()='OFFERS']"))) + + def open(self): + self.driver.get("https://testkwidos.tk/") + + def check(self): + return len(self.header)==1 + + def open_offers(self): + self.offers.click() + return OffersPage(self.driver) + + + + diff --git a/hwselenium11/pageobjects/offers_page.py b/hwselenium11/pageobjects/offers_page.py new file mode 100644 index 0000000..cdf8b15 --- /dev/null +++ b/hwselenium11/pageobjects/offers_page.py @@ -0,0 +1,75 @@ +from hwselenium11.pageobjects.base_page import BasePage +from selenium.webdriver.support import expected_conditions as ec +from selenium.webdriver.common.by import By + +class OffersPage(BasePage): + def __init__(self, driver): + super().__init__(driver) + + + @property + def service_type_dropdown(self): + return self.wait.until(ec.element_to_be_clickable((By.XPATH, "//*[@class='ui-multiselect-label ui-corner-all']"))) + + def service_type(self, service): + return self.driver.find_element_by_xpath(f"//*[text()='{service}']") + + @property + def service_type_dropdown_exit(self): + return self.driver.find_element_by_css_selector(".pi.pi-times") + + @property + def state_dropdown(self): + return self.driver.find_element_by_xpath("//*[contains(@class,'ng-tns-c22-1 prime-')]") + + @property + def county_dropdown(self): + return self.driver.find_element_by_xpath("//*[@title='Select']") + + @property + def all_county_checkbox(self): + return self.driver.find_element_by_xpath("//*[contains(@class,'ui-widget-header ui-corner-all')]/*[1]/*[2]") + + def state(self, state): + return self.driver.find_element_by_xpath(f"//span[text()='{state}']") + + @property + def county_exit(self): + return self.driver.find_element_by_xpath("//*[@class='pi pi-times']") + + @property + def card_title(self): + return self.driver.find_element_by_css_selector(".card-title.red-shape") + + @property + def card_color(self): + return self.driver.find_element_by_css_selector(".card-shape__green").value_of_css_property("background") + + @property + def card_code(self): + return self.driver.find_element_by_xpath("//*[@class='job-site-code job-site-code__color--green']") + + def click_service_type(self): + self.service_type_dropdown.click() + + def choose_service_type(self, service_type): + self.click_service_type() + self.service_type(service_type).click() + self.service_type_dropdown_exit.click() + + def choose_state(self, state): + self.state_dropdown.click() + self.state(state).click() + + def choose_all_county(self): + self.county_dropdown.click() + self.all_county_checkbox.click() + self.county_exit.click() + + def check_card_by_title_color(self, title, color, code): + return self.card_title.text==title and color in self.card_color and self.card_code.text==code + + + + + diff --git a/hwselenium11/test_landing_page.py b/hwselenium11/test_landing_page.py new file mode 100644 index 0000000..11ef8eb --- /dev/null +++ b/hwselenium11/test_landing_page.py @@ -0,0 +1,42 @@ +import pytest +from selenium import webdriver +import time +from hwselenium11.pageobjects.landing_page import LandingPage + + + + +class TestLandingPage: + @pytest.fixture() + def test_setup(self): + global driver + driver = webdriver.Chrome(executable_path="./chromedriver.exe") + yield + time.sleep(5) + driver.quit() + + def open_title_page(self, test_setup): + landing_page=LandingPage(driver) + landing_page.open() + assert landing_page.check() + + def test_open_offers(self, test_setup): + landing_page=LandingPage(driver) + landing_page.open() + offers_page=landing_page.open_offers() + offers_page.choose_service_type("Air conditioning") + offers_page.choose_service_type("Appliance installation") + offers_page.choose_state("California") + offers_page.choose_all_county() + assert offers_page.check_card_by_title_color("house", "rgb(224, 241, 222)", "R") + + + + + + + + + + + diff --git a/hwselenium13/pageobjects/base_page.py b/hwselenium13/pageobjects/base_page.py new file mode 100644 index 0000000..5c52df7 --- /dev/null +++ b/hwselenium13/pageobjects/base_page.py @@ -0,0 +1,6 @@ +from selenium.webdriver.support.ui import WebDriverWait + +class BasePage: + def __init__(self, driver): + self.driver=driver + self.wait=WebDriverWait(driver, 5) diff --git a/hwselenium13/pageobjects/blog_page.py b/hwselenium13/pageobjects/blog_page.py new file mode 100644 index 0000000..5aec169 --- /dev/null +++ b/hwselenium13/pageobjects/blog_page.py @@ -0,0 +1,27 @@ +from hwselenium13.pageobjects.base_page import BasePage +from selenium.webdriver.support import expected_conditions as ec +from selenium.webdriver.common.by import By + + +class BlogPage(BasePage): + def __init__(self, driver): + super().__init__(driver) + + @property + def blog(self): + return self.wait.until(ec.element_to_be_clickable((By.XPATH, "//*[@class='timeline-inverted']"))) + + def count_blog(self): + locator="//*[contains(text(),'Free For Homeowners')]" + target =self.blog + self.driver.execute_script('arguments[0].scrollIntoView();', target) + count=1 + while 'KWIDOS IS THE PLACE' not in target.text: + target= self.driver.execute_script(""" + return arguments[0].nextElementSibling + """, target) + self.driver.execute_script('arguments[0].scrollIntoView();', target) + count+=1 + return count + + diff --git a/hwselenium13/pageobjects/how_it_works.py b/hwselenium13/pageobjects/how_it_works.py new file mode 100644 index 0000000..ffb9f57 --- /dev/null +++ b/hwselenium13/pageobjects/how_it_works.py @@ -0,0 +1,13 @@ +from hwselenium13.pageobjects.base_page import BasePage +from selenium.webdriver.support import expected_conditions as ec +from selenium.webdriver.common.by import By + + +class HowItWorksPage(BasePage): + def __init__(self, driver): + super().__init__(driver) + + def take_screenshot(self, name): + screen_shot=self.driver.save_screenshot(name) + + diff --git a/hwselenium13/pageobjects/landing_page.py b/hwselenium13/pageobjects/landing_page.py new file mode 100644 index 0000000..2d9547b --- /dev/null +++ b/hwselenium13/pageobjects/landing_page.py @@ -0,0 +1,64 @@ +from hwselenium13.pageobjects.base_page import BasePage +from hwselenium13.pageobjects.register_consumer_page import RegisterConsumerPage +from selenium.webdriver.support import expected_conditions as ec +from selenium.webdriver.common.by import By +from hwselenium13.pageobjects.blog_page import BlogPage +from hwselenium13.pageobjects.how_it_works import HowItWorksPage +from selenium.webdriver.common.action_chains import ActionChains + + + +class LandingPage(BasePage): + def __init__(self, driver): + super().__init__(driver) + + @property + def header(self): + return self.driver.find_element_by_xpath("//*[contains(text(), 'connect Construction')]") + + @property + def register_consumer(self): + return self.wait.until(ec.element_to_be_clickable((By.XPATH,"//*[text()='SERVICE CONSUMER']"))) + + @property + def blog(self): + return self.wait.until(ec.element_to_be_clickable((By.XPATH, "//*[text()='BLOG']"))) + + @property + def howItWorks(self): + return self.wait.until(ec.element_to_be_clickable((By.XPATH, "//*[text()='HOW IT WORKS']"))) + + def open(self): + self.driver.get("https://testkwidos.tk/") + + def check(self): + return len(self.header)==1 + + def open_register_consumer(self): + self.register_consumer.click() + return RegisterConsumerPage(self.driver) + + def open_blog(self): + self.blog.click() + return BlogPage(self.driver) + + def open_how_it_works(self): + self.howItWorks.click() + return HowItWorksPage(self.driver) + + # def mouse_hover(self): + # hov = ActionChains(self.driver).move_to_element(self.blog) + # hov.perform() + # + # def check_the_color(self): + # return self.blog.value_of_css_property("color") + + def is_hovered(self): + color_before = self.blog.value_of_css_property("color") + + ActionChains(self.driver).move_to_element(self.blog).perform() + + color_after = self.blog.value_of_css_property("color") + print(f"color before = {color_before} and color after = {color_after}") + return color_before != color_after#doesn't work + diff --git a/hwselenium13/pageobjects/register_consumer_page.py b/hwselenium13/pageobjects/register_consumer_page.py new file mode 100644 index 0000000..f5ae031 --- /dev/null +++ b/hwselenium13/pageobjects/register_consumer_page.py @@ -0,0 +1,72 @@ +from hwselenium13.pageobjects.base_page import BasePage +from selenium.webdriver.support import expected_conditions as ec +from selenium.webdriver.common.by import By + + +class RegisterConsumerPage(BasePage): + def __init__(self, driver): + super().__init__(driver) + + @property + def reg_title(self): + return self.driver.find_elements_by_xpath("//*[@class='card-header']") + + @property + def first_name_textbox(self): + return self.wait.until(ec.element_to_be_clickable((By.XPATH,"//*[@formcontrolname='firstName']"))) + + @property + def last_name_textbox(self): + return self.driver.find_element_by_xpath("//*[@formcontrolname='lastName']") + + @property + def phone_textbox(self): + return self.driver.find_element_by_xpath("//*[@formcontrolname='phone']") + + @property + def email_textbox(self): + return self.driver.find_element_by_xpath("//*[@formcontrolname='email']") + + @property + def password_textbox(self): + return self.driver.find_element_by_xpath("//*[@formcontrolname='password']") + + @property + def terms_check_box(self): + return self.driver.find_element_by_xpath("//*[@class='col-lg-12 col-xs-12 col-md-12 checkbox-block']/p-checkbox") + + @property + def button(self): + return self.driver.find_element_by_xpath("//*[@type='submit']") + + @property + def alreadyExist(self): + return self.wait.until(ec.visibility_of_element_located((By.XPATH, "//*[@class='alert alert-danger']"))) + + + def check_in(self): + return len(self.reg_title)==1 + + def fill_out_form(self, first, last, phone, email, passw): + self.first_name_textbox.send_keys(first) + self.last_name_textbox.send_keys(last) + self.phone_textbox.send_keys(phone) + self.email_textbox.send_keys(email) + self.password_textbox.send_keys(passw) + self.terms_check_box.click() + + def click_button(self): + self.button.click() + + def accountExists(self, str): + return self.alreadyExist.text == str + + + + + + + + + + diff --git a/hwselenium13/test_howework13.py b/hwselenium13/test_howework13.py new file mode 100644 index 0000000..6290d83 --- /dev/null +++ b/hwselenium13/test_howework13.py @@ -0,0 +1,62 @@ +import pytest +from selenium import webdriver +import time +from hwselenium13.pageobjects.landing_page import LandingPage + +class TestHomeWork13: + @pytest.fixture() + def test_setup(self): + global driver + driver = webdriver.Chrome(executable_path="./chromedriver.exe") + yield + time.sleep(5) + driver.quit() + + def test_open_reg_page(self, test_setup): + landing_page=LandingPage(driver) + landing_page.open() + reg_page=landing_page.open_register_consumer() + reg_page.check_in() + reg_page.fill_out_form("Julya", "Jones", "(818) 222-1111", "JulyaJones22@gmail.com", "JulyaJones222&") + reg_page.click_button() + assert reg_page.accountExists('User already exists') + + def test_count_messages_blog(self, test_setup): + landing_page=LandingPage(driver) + landing_page.open() + blog_page=landing_page.open_blog() + assert blog_page.count_blog() == 12 + + def test_How_it_works_screenshot(self, test_setup): + landing_page=LandingPage(driver) + landing_page.open() + how_it_works=landing_page.open_how_it_works() + how_it_works.take_screenshot("ScreenShot.png") + + def test_mouse_hover(self, test_setup): + landing_page=LandingPage(driver) + landing_page.open() + #landing_page.mouse_hover() + assert landing_page.is_hovered() + + + + + + + + + + + + + + # def open_offers(self, test_setup): + # landing_page=LandingPage(driver) + # landing_page.open() + #offers_page=landing_page.open_offers() + # offers_page.choose_service_type("Air conditioning") + # offers_page.choose_service_type("Appliance installation") + # offers_page.choose_state("California") + # offers_page.choose_all_county() + # assert offers_page.check_card_by_title_color("house", "rgb(224, 241, 222)", "R")