def test_search(): browser.open('https://www.ecosia.org/') s('[name=q]').type('yashaka selene').press_enter() ss('.result').first.click() ss('[href="/yashaka/selene"]').should(have.size(3))
def test_duckduckgo_(): """ Straightforward/PageObjectLess style + s, ss for JQuery/Selenide's $, $$ ======================================================================== GO FOR: * the most concise * KISS (Keep It Simple Stupid), straightforward style * easy for newbies in automation (no need to learn modules/OOP(classes)) * easy for some DEVs if they will use these tests (and they should!) they know selectors and internals of app they develop hence, building more abstractions (modules/classes) on top of more low level straightforward code (like below) would add too much complexity to them, and harder in day-to-day usage TRADEOFFS: - given selectors are duplicated all over the project code base when you want to change it then you have to use global Find&Replace text, with sometimes pretty thorough manual checks line by line all places where the change will be applied. You CAN'T use some refactoring features of IDE like Refactor>Rename """ browser.open('https://duckduckgo.com/') s('[name=q]').type('yashaka selene python').press_enter() ss('.result__body') \ .should(have.size_greater_than(5)) \ .first.should(have.text('User-oriented Web UI browser tests')) ss('.result__body').first.s('a').click() browser.should(have.title_containing('yashaka/selene'))
def test_google_one(selene_config): start = time.time() logger.info(f'before start browser: {time.time() - start} seconds') browser.open("/") logger.info(f'browser start duration: {time.time() - start} seconds') s(by.name("q")).should(be.blank) \ .type("selenium").press_enter() ss(".srg .g").should(have.size_greater_than(0)) \ .first.should(have.text("Selenium automates browsers"))
def test_search(): # ARRANGE browser.open("https://www.ecosia.org/") # ACT s('[name="q"]').type("yashaka selene").press_enter() s('a.result-title').click() # ASSERT ss('[href="/yashaka/selene"]').should(have.size(3))
def test_google_two(selene_config): start = time.time() logger.info(f'before start browser: {time.time() - start} seconds') browser.open("/") logger.info(f'browser start duration: {time.time() - start} seconds') s(by.name("q")).should(be.blank) \ .type("selenium").press_enter() ss(".srg .g").should(have.size_greater_than(0)) \ .first.should(have.text("The Selenium project is a member of Software " "Freedom Conservancy"))
def test_search(): # Arrange browser.open('https://www.ecosia.org/') # Act s('[data-test-id="search-form-input"]').type( 'yashaka selene').press_enter() ss('.result').first.click() # Assert ss('[href="/yashaka/selene"]').should(have.size(3))
def __init__(self): self.login_form = s('#login_form') self.registration_form = s('#register_form') self.registration_email_field = s('#id_registration-email') self.registration_password_field = s('#id_registration-password1') self.registration_password_field_2 = s('#id_registration-password2') self.registration_button = s('[name="registration_submit"]') self.user_icon = s('.icon-user')
def __init__(self): self.login_link = s('#login_link') self.basket_link = s('.btn-group .btn:nth-child(1)') self.basket_button = s('.btn-add-to-basket') self.product_name = s('.content h1') self.product_name_in_message = s('.alert:nth-child(1) strong') self.product_price = s('.product_main .price_color') self.product_price_in_message = s('.alert:nth-child(3) strong')
def test_complete_todo(): browser.open('http://todomvc.com/examples/emberjs/') s('#new-todo').type('a').press_enter() s('#new-todo').type('b').press_enter() s('#new-todo').type('c').press_enter() ss('#todo-list>li').should(have.exact_texts('a', 'b', 'c')) s('#todo-list>li:nth-of-type(2) .toggle').click() ss('#todo-list>li.completed').should(have.exact_texts('b')) ss('#todo-list>li:not(.completed)').should(have.exact_texts('a', 'c'))
def test_adding_and_completing_tasks(): s('#new-todo').type('a').press_enter() s('#new-todo').type('b').press_enter() s('#new-todo').type('c').press_enter() ss('#todo-list>li').should(have.exact_texts('a', 'b', 'c')) s('#todo-list>li:nth-child(2) .toggle').click() s('#todo-list>li:nth-child(2)').should(have.css_class('completed')) s('#todo-list>li:nth-child(1)').should(have.no.css_class('completed')) s('#todo-list>li:nth-child(3)').should(have.no.css_class('completed'))
from selene import have from selene.support.shared import browser from selene.support.shared.jquery_style import s, ss # ARRANGE URL = 'https://www.ecosia.org/' query_string = "'yashaka selene'" # користувач завантажує сторінку в браузері: https://www.ecosia.org/ # browser.config.hold_browser_open = True browser.open(URL) # ACTS # користувач в поле пошуку вводить текст 'yashaka selene' # користувач натискає Enter s('[placeholder="Search the web to plant trees..."]').type(query_string).press_enter() # користувач переходить по першому посиланню серед знайдених результатів s('[class="result-snippet-link"]').click() # ASSERT # користувач перевіряє що на відкритій сторінці # є три локальні посилання на https://github.com/yashaka/selene ss('[href="/yashaka/selene"]').should(have.size(3)) browser.quit()
def __init__(self): self.login_link = s('#login_link') self.basket_link = s('.btn-group .btn:nth-child(1)')
from selene import have from selene.support.shared import browser from selene.support.shared.jquery_style import s, ss # Arrange browser.config.hold_browser_open = True browser.open('https://www.ecosia.org/') # Act s('[data-test-id=search-form-input]').type('yashaka selene').press_enter() browser.all('.result-snippet').first.click() # Assert ss('[href="/yashaka/selene"]').should(have.size(3)) browser.close()
def login(self, username, password): self.open().should_be_opened() s(by.id('user-name')).should(be.blank).type(username) s(by.id('password')).should(be.blank).type(password) s(by.id('login-button')).should(be.clickable).click() return self
def items_left_should_be(self, amount: int): s('#todo-count>strong').should(have.exact_text(str(amount))) return self
def toggle_all(self): s('#toggle-all').click() return self
def menu_should_be_opened(self): s("div.bm-menu > nav.bm-item-list").should(be.visible) return self
def open_menu(self): s("div.bm-burger-button > button").click() return self
from selene import have from selene.support.shared import browser from selene.support.shared.jquery_style import s, ss # Arrange browser.config.hold_browser_open = True browser.open('https://google.com/ncr') # Act s('[type="text"]').type('yashaka selene').press_enter() browser.all('#search .g').first.element('h3').click() # Assert ss('[href="/yashaka/selene"]').should(have.size(3)) browser.close()
from selene import have from selene.support.shared import browser from selene.support.shared.jquery_style import s, ss # Arrange browser.config.hold_browser_open = True browser.open('https://duckduckgo.com/') # Act s('[id=search_form_input_homepage]').type('yashaka selene').press_enter() browser.all('.result:not(.result--more)').first.click() # Assert ss('[href="/yashaka/selene"]').should(have.size(3)) browser.close()
def step(text='yashaka selene python'): s('[name=q]').type(text).press_enter()
def login_succeed(self): s(by.id('inventory_container')).should(be.existing)
def add(self, *names: str): for name in names: s('#new-todo').type(name).press_enter() return self
def login_failed(self): s('h3[data-test="error"]')\ .should(have.text("Epic sadface: Username and password do not match any user in this service"))\ .s('button.error-button')
def __init__(self): self.todos = ss('#todo-list>li') self.clear_completed_button = s('#clear-completed')
def click_logout(self): self.menu_should_be_opened() s("div.bm-menu > nav.bm-item-list > #logout_sidebar_link").click() return self
def click_reset_app_state(self): self.menu_should_be_opened() s("div.bm-menu > nav.bm-item-list > #reset_sidebar_link").click() return self
def click_on_cart_icon(self): s("div.shopping_cart_container > a.shopping_cart_link").click() return self
def click_all_items(self): self.menu_should_be_opened() s("div.bm-menu > nav.bm-item-list > #inventory_sidebar_link").click() return self
from selene import have from selene.support.shared import browser from selene.support.shared.jquery_style import s, ss # ARRANGE browser.config.hold_browser_open = True browser.open('http://todomvc.com/examples/emberjs/') # ACTS s('[id="new-todo"]').type('Listen Lesson').press_enter() s('[id="new-todo"]').type('Listen Book').press_enter() s('[id="new-todo"]').type('Watch TV').press_enter() # ASSERT ss('[id="todo-list"] li').should( have.exact_texts('Listen Lesson.', 'Listen Book', 'Watch TV'))