yashaka

Untitled

Jan 27th, 2017
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.25 KB | None | 0 0
  1. # coding=utf-8
  2. from selene import config
  3. from selene.support import by
  4. from selene.support.conditions import be
  5. from selene.support.conditions import have
  6. from selene.tools import visit, s, ss, wait_to
  7.  
  8.  
  9. def test_filters_tasks():
  10.     config.browser_name = 'chrome'
  11.     visit('https://todomvc4tasj.herokuapp.com/')
  12.     wait_to(have.js_returned_true(
  13.         "return $._data($('#clear-completed').get(0), 'events').hasOwnProperty('click')"), timeout=config.timeout * 2)
  14.                 # ', timeout=config.timeout * 2' - мабуть я не туди вписав, але я нажаль не розумію логіки запису
  15.  
  16.       # чому не розумієш? логіка проста, в пітоні можна параметри передавати не просто значеннями - й записуючи їх ім'я
  17.       # можна було б пропустити це ім'я тобіш ось так записати:
  18.       # .hasOwnProperty('click')"), config.timeout * 2)
  19.       # а не писали ми його перший раз, тому что в пітоні параметри можуть мати дефолтні значення...
  20.       # і там по дефолту якраз використоується те що прописано в config.timeout
  21.  
  22.     # set tasks
  23.       # навіщо цей коментар? поперше сет - тут не підходить - правильно "add tasks"
  24.       # але невже по методам add - і так не зрозуміло що ми задачі додаємо?
  25.       # запам'ятай - коментарі до коду - зло :)
  26.       # тому що
  27.       # 1. їх важко підтримувати... часто люди забувають оновити коментар якщо вони оновили код
  28.       # 2. вони приводять до гівнокоду... адже програмісти починають думати що можна написати гівнокод, пояснити його в коментарях і це буде ок
  29.       # а насправді це не ок. Правильно - писати код так, щоб він сам себе пояснював, щоб він був читабельним і простим
  30.       # щоб коментарі були не потрібні...
  31.       # от наприклад я тобі скидав лінк на приклад в листі... там для вейту вище... для от цього шматка:
  32.       # "return $._data($('#clear-completed').get(0), 'events').hasOwnProperty('click')" була створена окрема змінна
  33.       # з читабельним іменем... - от це правильний спосіб "коментування" - тобіш не через коментар а через код...
  34.       # і ти вже це зробив з кодом нижче - тим що дав гарні імена коду який створює задачу - виніс його в метод add
  35.       # цього достатньо з головою
  36.     add('task1')
  37.     add('task2')
  38.     add('task3')
  39.     add('task4')
  40.     tasks.should(have.exact_texts('task1', 'task2', 'task3', 'task4'))
  41.       # раз почав створювати методи... то скрізь створюй... і тут теж бажано створити якийсь метод який отримуватиме параметром
  42.       # от ці task1, task2, ... і робитиме що треба
  43.       # ти правда можеш не знати як таке зробити... але от в pycharm зажми контрол і клікни на exact_texts і подивись як там вони приймаються...
  44.       # почитай про varargs в пітоні
  45.  
  46.     # destroy task
  47.     destroy('task2')
  48.     s('#todo-count strong').should(have.exact_text('3'))
  49.       # ну ну... а що якщо замість другої видалилась третя задача?
  50.       # (на каунт я б в будь-якому випадку поки забив - це окрема фіча, яку поки можна не покривати, вона меньшого приорітету чим всі інші)
  51.  
  52.     # mark task as completed
  53.     markСompleted('task4')
  54.       # про імена писав в листі... почитай ще раз ФАК
  55.     filter_active()
  56.       # от не треба було цього робити) ми тут фільтерінг не покриваємо в цьому сценарії :)
  57.       # тут можна було б викрутитись інакше - профільтрувати по css классу active - але це було б занадто низьковрівнево
  58.       # в такому довгому енд ту енд тесті - можна покластия на "неявну перевірку через кліер комплітед"
  59.       # тобто достатньо перевірити результати кліер комплітед - адже видаляться тільки ті задачі які перед тим були закомплічені
  60.     tasks.filtered_by(be.visible).should(have.exact_texts('task1', 'task3'))
  61.  
  62.     # clear completed task
  63.     filter_completed()
  64.     tasks.filtered_by(be.visible).should(have.exact_texts('task4'))
  65.  
  66.     filter_all()
  67.     tasks.should(have.exact_texts('task1', 'task3', 'task4'))
  68.  
  69.     filter_clear_completed()
  70.       # з іменем цього метоад явно щось не те... ну от почитай ФАК ще раз... хіба цей метод робить фільтерінг?
  71.     tasks.should(have.exact_texts('task1', 'task3'))
  72.  
  73.     # mark all tasks as completed
  74.     markAllCompleted()
  75.     filter_completed()
  76.     tasks.filtered_by(be.visible).should(have.exact_texts('task1', 'task3'))
  77.  
  78.     # clear all completed tasks
  79.     filter_clear_completed()
  80.    
  81.       # а де тут перевірка?
  82.  
  83.  
  84. tasks = ss('#todo-list li')
  85.  
  86.  
  87. def assert_tasks(*task_text):
  88.     tasks.should(have.exact_texts(*task_text))
  89.  
  90.  
  91. def add(task_text):
  92.     s('#new-todo').set(task_text).press_enter()
  93.  
  94.  
  95. def destroy(task_text):
  96.     tasks.element_by(have.exact_text(task_text)).click().element('.destroy').click()
  97.  
  98.  
  99. def markСompleted(task_text):
  100.     tasks.element_by(have.exact_text(task_text)).element('.toggle').click()
  101.  
  102.  
  103. def markAllCompleted():    s('#toggle-all').click()
  104.  
  105.  
  106. def filter_clear_completed():
  107.     s('#clear-completed').click()
  108.  
  109.  
  110. def filter_active():
  111.     s(by.link_text('Active')).click()
  112.  
  113.  
  114. def filter_completed():
  115.     s(by.link_text('Completed')).click()
  116.  
  117.  
  118. def filter_all():
  119.     s(by.link_text('All')).click()
  120.  
  121.  
  122.     # "test_filters_tasks()" - Цей рядок я використовував, бо запускав файл з PyCharm, по іншому він у мене не виконувався з IDE.
  123.     #  Я так зрозумів, що необхідні правильні налаштування фреймворку (підключення pytest в ранери, але поки в мене не вийшло)
  124.     #  з командной строки через py.test запускаеться нормально
Advertisement
Add Comment
Please, Sign In to add comment