Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # coding=utf-8
- from selene import config
- from selene.support import by
- from selene.support.conditions import be
- from selene.support.conditions import have
- from selene.tools import visit, s, ss, wait_to
- def test_filters_tasks():
- config.browser_name = 'chrome'
- visit('https://todomvc4tasj.herokuapp.com/')
- wait_to(have.js_returned_true(
- "return $._data($('#clear-completed').get(0), 'events').hasOwnProperty('click')"), timeout=config.timeout * 2)
- # ', timeout=config.timeout * 2' - мабуть я не туди вписав, але я нажаль не розумію логіки запису
- # чому не розумієш? логіка проста, в пітоні можна параметри передавати не просто значеннями - й записуючи їх ім'я
- # можна було б пропустити це ім'я тобіш ось так записати:
- # .hasOwnProperty('click')"), config.timeout * 2)
- # а не писали ми його перший раз, тому что в пітоні параметри можуть мати дефолтні значення...
- # і там по дефолту якраз використоується те що прописано в config.timeout
- # set tasks
- # навіщо цей коментар? поперше сет - тут не підходить - правильно "add tasks"
- # але невже по методам add - і так не зрозуміло що ми задачі додаємо?
- # запам'ятай - коментарі до коду - зло :)
- # тому що
- # 1. їх важко підтримувати... часто люди забувають оновити коментар якщо вони оновили код
- # 2. вони приводять до гівнокоду... адже програмісти починають думати що можна написати гівнокод, пояснити його в коментарях і це буде ок
- # а насправді це не ок. Правильно - писати код так, щоб він сам себе пояснював, щоб він був читабельним і простим
- # щоб коментарі були не потрібні...
- # от наприклад я тобі скидав лінк на приклад в листі... там для вейту вище... для от цього шматка:
- # "return $._data($('#clear-completed').get(0), 'events').hasOwnProperty('click')" була створена окрема змінна
- # з читабельним іменем... - от це правильний спосіб "коментування" - тобіш не через коментар а через код...
- # і ти вже це зробив з кодом нижче - тим що дав гарні імена коду який створює задачу - виніс його в метод add
- # цього достатньо з головою
- add('task1')
- add('task2')
- add('task3')
- add('task4')
- tasks.should(have.exact_texts('task1', 'task2', 'task3', 'task4'))
- # раз почав створювати методи... то скрізь створюй... і тут теж бажано створити якийсь метод який отримуватиме параметром
- # от ці task1, task2, ... і робитиме що треба
- # ти правда можеш не знати як таке зробити... але от в pycharm зажми контрол і клікни на exact_texts і подивись як там вони приймаються...
- # почитай про varargs в пітоні
- # destroy task
- destroy('task2')
- s('#todo-count strong').should(have.exact_text('3'))
- # ну ну... а що якщо замість другої видалилась третя задача?
- # (на каунт я б в будь-якому випадку поки забив - це окрема фіча, яку поки можна не покривати, вона меньшого приорітету чим всі інші)
- # mark task as completed
- markСompleted('task4')
- # про імена писав в листі... почитай ще раз ФАК
- filter_active()
- # от не треба було цього робити) ми тут фільтерінг не покриваємо в цьому сценарії :)
- # тут можна було б викрутитись інакше - профільтрувати по css классу active - але це було б занадто низьковрівнево
- # в такому довгому енд ту енд тесті - можна покластия на "неявну перевірку через кліер комплітед"
- # тобто достатньо перевірити результати кліер комплітед - адже видаляться тільки ті задачі які перед тим були закомплічені
- tasks.filtered_by(be.visible).should(have.exact_texts('task1', 'task3'))
- # clear completed task
- filter_completed()
- tasks.filtered_by(be.visible).should(have.exact_texts('task4'))
- filter_all()
- tasks.should(have.exact_texts('task1', 'task3', 'task4'))
- filter_clear_completed()
- # з іменем цього метоад явно щось не те... ну от почитай ФАК ще раз... хіба цей метод робить фільтерінг?
- tasks.should(have.exact_texts('task1', 'task3'))
- # mark all tasks as completed
- markAllCompleted()
- filter_completed()
- tasks.filtered_by(be.visible).should(have.exact_texts('task1', 'task3'))
- # clear all completed tasks
- filter_clear_completed()
- # а де тут перевірка?
- tasks = ss('#todo-list li')
- def assert_tasks(*task_text):
- tasks.should(have.exact_texts(*task_text))
- def add(task_text):
- s('#new-todo').set(task_text).press_enter()
- def destroy(task_text):
- tasks.element_by(have.exact_text(task_text)).click().element('.destroy').click()
- def markСompleted(task_text):
- tasks.element_by(have.exact_text(task_text)).element('.toggle').click()
- def markAllCompleted(): s('#toggle-all').click()
- def filter_clear_completed():
- s('#clear-completed').click()
- def filter_active():
- s(by.link_text('Active')).click()
- def filter_completed():
- s(by.link_text('Completed')).click()
- def filter_all():
- s(by.link_text('All')).click()
- # "test_filters_tasks()" - Цей рядок я використовував, бо запускав файл з PyCharm, по іншому він у мене не виконувався з IDE.
- # Я так зрозумів, що необхідні правильні налаштування фреймворку (підключення pytest в ранери, але поки в мене не вийшло)
- # з командной строки через py.test запускаеться нормально
Advertisement
Add Comment
Please, Sign In to add comment