Подойдет тем, кто хочет начать писать автоматизированные тесты.
Задача End-To-End тестов — нажимать на кнопки, вводить данные в поля формы, двигать мышкой — как это делал бы человек.
Заставь компьютер работать за себя! Ты тут босс 😎
Каждый вторник я провожу бесплатные онлайн стендапы в Zoom.
Если у тебя есть вопрос или проблема, подключайся:
zyx
@[Anton Breslavsky|https://t.me/breslavsky_anton|assets/anton.jpg]
Что бы следить за анонсами новых туториалов подписывайся на телеграмм канал
❗ Внимание! Cypress обновил свой сайт после выхода видео.
Записанное видео, немного не соответствует туториалу и будет скоро обновлено.
Если ты любишь сначала смотреть, а потом делать 📹 Видео-туториал
Node.js — среда выполнения Java Script и менеджер пакетов npm.
%/projects/cypress/test_flight
npm init
ENTER ↵
, в конце введи yes
+ ENTER ↵
package.json
Главный навык хорошего IT специалиста — уметь гуглить!
Научись формулировать вопросы и получать ответы самостоятельно.
Начни вести свой собственный словарь терминов.
package.json
?Можно выполнить команду npm init -y
~"В конспект" и файл package.json
будет создан сразу.
Инициализация — первый этап любого проекта.
Ты должен проснуться в 3 часа ночи и знать как начать новый проект.
npm install cypress@9 --save-dev
~"В конспект"node_modules
?package.json
?На вкладке версии пакета Cypress в репозитории менеджера пакетов NPM https://www.npmjs.com/package/cypress
Пакеты — это наборы готового кода, написанные другими разработчиками. ~"В конспект"
Зачем писать велосипеды, если их уже кто-то написал и выложил?
Легче найти нужный пакет, типа Cypress на https://npmjs.com, установить и начать использовать.
npx cypress open
~"В конспект"cypress
в корне проекта?npx
?.spec.js
лежат в папке cypress/integration
?Ты должен знать как запускать Cypress в режиме разработки тестов.
todo.spec.js
CTRL
+ C
в терминале, чтобы остановить Cypress ~"В конспект"cypress/integration
удали 1-getting-started
и 2-advanced-examples
cypress/integration/hello-cypress.spec.js
:it('should do subscribe to news letter', () => {
cy.visit('https://www.cypress.io/');
});
SHIFT
+ ALT
+ F
SHIFT
+ OPTION
+ F
CTRL
+ Shift
+ I
CTRL
+ S
npx cypress open
hello-cypress.spec.js
Visual Code постоянно добавляет строчку const { it } = require("mocha");
и код не работает?
///<reference types="cypress" />
it
?cy.visit
?❗ Всегда используй для названия тестов шаблон
it('should do something...
it('should do subscribe to news letter', () => {
cy.visit('https://www.cypress.io/');
cy.get('.footer-form > .border').click();
});
it('should do subscribe to news letter', () => {
cy.visit('https://www.cypress.io/');
cy.get('.footer-form > .border').click();
cy.wait(1000);
cy.get('#subscribe-email').type('test@test.ru');
});
cy.get()
? ~"В конспект"#subscribe-email
?.type()
? ~"В конспект"cy.wait(1000)
?На самом деле
wait
плохая практика. Скоро ты узнаешь почему.
it('should do subscribe to news letter', () => {
cy.visit('https://www.cypress.io/');
cy.get('.footer-form > .border').click();
cy.wait(1000);
cy.get('#subscribe-email').type('test@test.ru');
cy.get('.flex > .block').click();
cy.get('.border-t > .border').click();
});
.border-t > .border
?.click()
? ~"В конспект"it('should subscribe to news letter', () => {
cy.visit('https://www.cypress.io/');
cy.get('.footer-form > .border').click();
cy.wait(1000);
cy.get('#subscribe-email').type('test@test.ru');
cy.get('.flex > .block').click();
cy.get('.border-t > .border').click();
cy.get('.leading-36px').should('have.text', 'Thank you for subscribing!');
});
.leading-36px
?.should('have.text', '?')
? ~"В конспект"❗ Тесты не просто должны кликать по кнопкам!
Задача тестов — проверять правильность работы программы!
Кликнул → проверь результат! ~"В конспект"
CTRL
+C
npx cypress run
~"В конспект"package.json
обнови команду test
в разделе scripts
:+ "scripts": {
- "test": "echo \"Error: no test specified\" && exit 1"
+ "test": "cypress run"
+ }
npm test
Ты должен знать как запускать Cypress в режиме прогона тестов.
Уже совсем скоро, именно с помощью этой команды, ты будешь запускать свои тесты на своем сервере!
- 'Thank you for subscribing!'
+ 'Thank you for subscribing!!!'
npm test
~/cypress/videos
?Бинго 🥳
Тесты могут ломаться в будущем. Ты должен уметь искать причины и исправлять их.
Та да 🥳 Ты дошел до конца.
Полезный материал?
* 🤩 Очень полезный материал
* 😃 В целом полезный
* 😐 Возможно что-то пригодится
* 😒 Нет ничего полезного
* 😬 Абсолютно бесполезно
**Спасибо за ответ!**
Все ли было понятно?
* 🤩 Все понятно на 100%
* 😃 В целом все понятно
* 😐 Что-то понятно, что-то нет
* 😒 Понял только малую часть
* 😬 Ничего не понял
**Спасибо за ответ!**
Как тебе такой формат туториала?
* 🤩 Очень удобно
* 😃 Мне понравилось
* 😐 Нормально
* 😒 Не удобно
* 😬 Ужасно
**Спасибо за ответ!**
Выбери точный селектор для элемента:
<p id="success">Thank you for subscribing!</p>
- [ ] `cy.get('id=success')`
- [x] `cy.get('p#success')`
- [ ] `cy.get('p.success')`
Селектор по [id](https://www.w3schools.com/cssref/sel_id.php)
<p class="success message">Thank you for subscribing!</p>
- [ ] `cy.get('[class=success]')`
- [ ] `cy.get('p#class')`
- [x] `cy.get('p.success.message')`
Селектор по классам `class="xyz zyx"`
<p data-cy="success">Thank you for subscribing!</p>
- [x] `cy.get('p[data-cy=success]')`
- [ ] `cy.get('data-cy=success')`
- [ ] `cy.get('p.data-cy.success')`
Селектор по [аттрибутам](https://www.w3schools.com/cssref/sel_attribute_value.php)
<p data-cy="success xyzXYZ">Thank you for subscribing!</p>
- [x] `cy.get('p[data-cy^=success]')`
- [ ] `cy.get('p[data-cy.=success]')`
- [ ] `cy.get('p[data-cy?=success]')`
Селектор по [начальному значению аттрибута](https://www.w3schools.com/cssref/sel_attr_begin.php)
<p data-cy="xyzXYZ success">Thank you for subscribing!</p>
- [ ] `cy.get('p[data-cy.=success]')`
- [x] `cy.get('p[data-cy$=success]')`
- [ ] `cy.get('p[data-cy#=success]')`
Селектор по [конечному значению аттрибута](https://www.w3schools.com/cssref/sel_attribute_value_lang.php)
<p data-cy="xyzXYZ success XYZxyz">Thank you for subscribing!</p>
- [ ] `cy.get('p[data-cy^=success]')`
- [x] `cy.get('p[data-cy*=success]')`
- [ ] `cy.get('p[data-cy$=success]')`
Селектор по [содержимому значения аттрибута](https://www.w3schools.com/cssref/sel_attr_contain.php)
У тебя есть HTML документ:
<h1 class="subscription">News letter subscription</h1>
<form>
<input name="email" type="email">
<input name="confirm-email" type="email">
<button type="submit">Submit</button>
</form>
<h1 class="disclaimer">Disclaimer</h1>
<p>The content of this message is confidential.</p>
Заполни код:
cy.get('?|h1.subscription|?').should('have.text', 'News letter subscription');
// email input
cy.get('?|input[name=email]|?').type('?');
// confirm email input
cy.get('?|input[name=confirm-email]|?').type('?');
// submit button
cy.get('?|button[type=submit]|?').click();
Не хватило? Поиграйся с https://automationteststore.com/