This is a basic tutorial on Spring core.
Best viewed when animations and transitions are supported, e.g., view in MS Powerpoint. So, please try to view it with animation else the main purpose of this presentation will be defeated.
React Components Lifecycle | React Tutorial for Beginners | ReactJS Training ...Edureka!
This Edureka tutorial on React Components will help you in understanding the fundamentals of components in ReactJS. This tutorial helps you learn the following topics:
1. React Components
2. Props
3. State
4. Flow Of Stateless & Stateful Component
5. Lifecycle Of Component
This is a basic tutorial on Spring core.
Best viewed when animations and transitions are supported, e.g., view in MS Powerpoint. So, please try to view it with animation else the main purpose of this presentation will be defeated.
React Components Lifecycle | React Tutorial for Beginners | ReactJS Training ...Edureka!
This Edureka tutorial on React Components will help you in understanding the fundamentals of components in ReactJS. This tutorial helps you learn the following topics:
1. React Components
2. Props
3. State
4. Flow Of Stateless & Stateful Component
5. Lifecycle Of Component
In JavaScript, almost "everything" is an object.
-Booleans can be objects (if defined with the new keyword)
-Numbers can be objects (if defined with the new keyword)
-Strings can be objects (if defined with the new keyword)
-Dates are always objects
-Maths are always objects
-Regular expressions are always objects
-Arrays are always objects
-Functions are always objects
-Objects are always objects
Over 200 Pages of resources and code snippets to learn JavaScript and JavaScript DOM manipulation. JavaScript is the most popular web programming language and this eBook will help you learn more about JavaScript Coding
JavaScript - Chapter 4 - Types and StatementsWebStackAcademy
A computer program is a list of "instructions" to be "executed" by a computer.
In a programming language, these programming instructions are called statements.
A JavaScript program is a list of programming statements.
JavaScript statements are composed of:
Values, Operators, Expressions, Keywords, and Comments.
This statement tells the browser to write "Hello Dolly." inside an HTML element with id="demo":
JavaScript Data Types
JavaScript variables can hold many data types: numbers, strings, objects and more.
In programming, data types is an important concept.
To be able to operate on variables, it is important to know something about the type.
In JavaScript, almost "everything" is an object.
-Booleans can be objects (if defined with the new keyword)
-Numbers can be objects (if defined with the new keyword)
-Strings can be objects (if defined with the new keyword)
-Dates are always objects
-Maths are always objects
-Regular expressions are always objects
-Arrays are always objects
-Functions are always objects
-Objects are always objects
Over 200 Pages of resources and code snippets to learn JavaScript and JavaScript DOM manipulation. JavaScript is the most popular web programming language and this eBook will help you learn more about JavaScript Coding
JavaScript - Chapter 4 - Types and StatementsWebStackAcademy
A computer program is a list of "instructions" to be "executed" by a computer.
In a programming language, these programming instructions are called statements.
A JavaScript program is a list of programming statements.
JavaScript statements are composed of:
Values, Operators, Expressions, Keywords, and Comments.
This statement tells the browser to write "Hello Dolly." inside an HTML element with id="demo":
JavaScript Data Types
JavaScript variables can hold many data types: numbers, strings, objects and more.
In programming, data types is an important concept.
To be able to operate on variables, it is important to know something about the type.
QA Fest 2015. Иван Пашко. XPath yourself. Tips & TricksQAFest
Все мы знаем, что такое XPath и широко используем его в автоматизации. Но неправильное построение XPath выражений приводит тестровщиков в ужас, делает наши тесты хрупкими, и как результат - получаем долгие вечера отладки кода. В докладе я расскажу о том, что такое XPath, о распространенных ошибках при работе с ним, и как их избегать. Будет интересно и начинающим тестировщикам, и экспертам в области автоматизации.
Разработка крупного Standalone проекта на юнити: улучшаем производительностьВадим Воробьев
Презентация к докладу на DevGamm 2015, Минск.
В докладе рассказывлось о технических тонкостях оптимизации под ПК в Unity на примере The Godlike и приводились истории разработки. Как использовать кодогенерацию, что может профайлер Unity, как правильно работать с UI и почему не стоит связываться с LINQ.
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Andrey Rebrov
Как-то так происходит, что “на 10 девчонок по статистике 9 ребят”, а точнее на группу из 5-7 разработчиков – 1 тестировщик. Или его нет совсем. Так что очень часто приходится и код писать, и тестировать, а дата релиза все ближе и ближе.
В тех случаях, когда мы пишем веб-приложение, помочь в нашей нелегкой судьбе может бодрящий микс из Selenium и TestNG... Как это сделали мы, какие потом получили выводы и результаты — все это я и хочу рассказать и показать
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеAlexander Byndyu
В докладе рассматривается использование популярных фреймворков в разработке ASP.NET MVC приложения, как сделать его наиболее гибким. Будет затронута тема минимизации дублирования и повторное использование кода, применение методов метапрограммирования отображений; уменьшение логики в контроллерах; применение принципов SOLID и GRASP для разработки доменной модели приложения.
По материалам конференции .NET разработчиков http://www.dotnetconf.ru/Materialy/Asp_net_mvc_kak_postroit_gibkoe_web_prilozenie
React со скоростью света: не совсем обычный серверный рендерингTimophy Chaptykov
Расскажу о небольшом исследовании, в котором мы думали о том, можем ли мы себе позволить использовать React для отдельных элементов на сайте, как устроен серверный рендеринг в VK; и получилось ли связать одно с другим. Упомяну о строковых шаблонизаторах, виртуальной DOM и LR-парсерах.
3. 1
0%
1. Вводная часть
• термины, определения
• XPath в браузере
2. Язык XPath
3. Построение локаторов в Selenium
4. Терминология
• XPath – язык запросов к элементам XML-документа
• Selenium WebDriver – инструмент для
автоматизированного управления браузерами
• Локатор – строка, уникально идентифицирующая
элемент веб-страницы
5. Локаторы в Selenium
Инженер по тестированию задает в Selenium
последовательность действий
• Открыть страницу
• Произвести действие
• Проверить результат
6. Локаторы в Selenium
С помощью локаторов Selenium «понимает» с
каким веб-элементом производить действие
id Локатор
name
CSS
XPath
className
tagName linkText
partialLinkText
7. XPath
• XML – расширяемый язык разметки
• XPath – путь к элементу xml
• HTML – язык разметки Web-документа
• DOM – объектная модель документа, в
частности HTML
• XPath – осуществляет навигацию по DOM
11. XPath в Chrome
Инструменты разработчика
Elements
Ctrl + F
Вызвать Инструменты разработчика:
• F12
• Ctrl+Shift+I
• Настройки – Инструменты –
Инструменты разработчика
12.
13. XPath в консоли браузера
• $x(path) – принимает ХPath в качеств
параметра и возвращает массив элементов
• $0 … $4 – доступ к последним вызванным
DOM - элементам
14. 15%
1. Вводная часть
2. Язык XPath
2
• абсолютный путь
• относительный путь
• условия
• оси
• функции
• операторы
3. Построение локаторов в Selenium
15. XPath. Абсолютный путь
A/B/C
<A>
<B>
<C/>
</B>
</A>
Путь от корневого элемента
XPath
XML
20. <A>
<B>
XPath. Условия
<C> </C>
<C> </C>
</B>
</A>
//C[1]
В скобках [] заключены условия выборки
21. XPath. @ - атрибут
//C[@id]
<A>
<B>
<C id> </C>
<C> </C>
</B>
</A>
Будут выбраны все элементы, имеющие атрибут "id"
22. XPath. @ - атрибут
//C[@id="one"]
<A>
<B>
<C id="one"> </C>
<C id="two"> </C>
</B>
</A>
Значение атрибута можно сравнивать
23. XPath. * - любой
<A>
<B id>
<C id> </C>
<C> </C>
</B>
</A>
//*[@id]
Любой элемент
24. XPath. * - любой
<A>
<B>
<C id> </C>
<C name> </C>
<C></C>
</B>
</A>
//C[@*]
Любой атрибут
25. Как быть в этом случае?
???
<div id="name">Имя: </div>
<input type="text">
<div id="second_name">Фамилия: </div>
<input type="text">
Каким XPath найти input для ввода имени?
26.
27. XPath. Оси
//div[@id="name"]/following-sibling::input[1]
<div id="name">Имя: </div>
<input type="text">
<div id="second_name">Фамилия: </div>
<input type="text">
С помощью осей осуществляется навигация по узлам XML документа
28.
29. XPath. Оси. Сокращения
• attribute:: — можно заменить на «@»
• child:: — часто просто опускают
• descendant:: — можно заменить на «.//»
• parent:: — можно заменить на «..»
• self:: — можно заменить на «.»
30. XPath. Функции
Функции позволяют использовать результат операций с множеством нод, строками,
числами и логическими операторами в XPath выражених
31. XPath. Функции. text()
//C[text()="Доброе утро!"]
<A>
<B>
<C>Доброе утро!</C>
<C>Злое утро!</C>
</B>
</A>
Функция text() возвращает набор текстовых нод
32. XPath. Функции. contains()
//C[contains(text(), "утро")]
<A>
<B>
<C>Доброе утро!</C>
<C>Злое утро!</C>
</B>
</A>
Строковая функция contains() возвращает истину,
если первая строка содержит вторую
33. XPath. Функции. contains()
//C[contains(@id, "name")]
<A>
<B>
<C id="name"></C>
<C id="second_name"></C>
</B>
</A>
В качестве первого значения может быть подана любая строка
34. XPath. Функции. normalize-space()
//C[normalize-space(@id)="name"]
<A>
<B>
<C id="name"></C>
<C id=" name "></C>
</B>
</A>
Строковая функция normalize-space() убирает лишние и пробелы
35. XPath. Функции. not()
//*[not(@*)]
<A>
<B>
<C id="name"></C>
<C id="second_name"></C>
</B>
</A>
Функция not() – логическое отрицание.
Будут выбраны любые элементы, не имеющие атрибутов
36. XPath. Функции. count()
//*[count(C)=2]
<A>
<B>
<C></C>
<C></C>
</B>
</A>
Функция count() возвращает количество элементов.
Будут выбраны элементы, имеющие два дочерних элемента "C"
37. XPath. Функции. last()
//C[last()]
<A>
<B>
<C></C>
<C></C>
<C></C>
</B>
</A>
Функция last() возвращает номер последнего элемента в множестве
38. XPath. Функции. last()
//C[last()-1]
<A>
<B>
<C></C>
<C></C>
<C></C>
</B>
</A>
Будет выбран предпоследний элемент
40. XPath. Позиции элементов
//C[position() mod 2=0]
<A>
<B>
<C></C>
<C></C>
<C></C>
<C></C>
</B>
</A>
Функция position() возвращает позицию элемента.
Оператор mod возвращает остаток от деления.
Будут выбраны все элементы, имеющие четную позицию
41. 1. Вводная часть
2. Язык XPath
3. Построение локаторов в Selenium
• принципы составления
• приемы
• примеры
3
65%
42. XPath-локаторы. Принципы
составления
• Использовать, когда не хватает
возможности простых локаторов
• Читабельный
• Универсальный – не содержит элементов,
которые не влияют на нахождение
элемента
• Хранить локаторы в одном месте
44. Приём 1. Ищите по тексту
если Ваше приложение одноязычное
Текст легко читать и менять.
Id могут быть динамическими.
<td>
<button id="ext-39"/>Выполнить</button>
</td>
//button[text()="Выполнить"]
45. Приём 1. Ищите по тексту
//td[contains(., "найди")]
Функция text() возвращает первый текстовый элемент.
<td>
<span></span>
"
найди меня
"
</td>
//td[contains(text(), "найди")]
46. Приём 2. Используйте только
нужные элементы
Не используйте элементы, которые не определяют элемент.
В промежуточный путь могут быть добавлены новые элементы.
<td>
<div class="buttons">
<button id="perform"/>Выполнить</button>
</div>
<td>
//button[@id="perform"]
//div/button[@id="perform"]
47. Приём 3. Пользуйтесь contains()
//button[contains(text(), "Выполнить")]
<button id="ext-39"/>
Выполнить действие
</button>
Ищите элемент по его части.
<td>
</td>
Это поможет избежать лишних пробелов и переносов строк.
48. Приём 3. Пользуйтесь contains()
<td>
//button[contains(@name, "EditDocument")]
<button name="SubSection$EditDocument$ChildBBB"/>
</button>
</td>
Не используйте длинных и непонятных выражений.
Их будут читать люди.
49. Приём 4. Комбинируйте пути
//button[text()="Выбрать"]|//button[.//*[contains(text(), "Выбрать")]]
Комбинируйте пути с помощью "|", если XPath элемента чуть-чуть отличается
50. Приём 5. Пишите относительные
<td>
<label for="name">Имя</label>
</td>
<td>
<span nowrap>
<input type="text">
</span>
</td>
пути
//label[@for="name"]/../following-sibling::td[1]//input
Пишите путь до нужного элемента относительно других элементов
51. Приём 6. Обратный вариант
написания
//input[./ancestor::td/preceding-sibling::td/label[@for="name"]]
<td>
<label for="name">Имя</label>
</td>
<td>
<span nowrap>
<input type="text">
</span>
</td>
Будет найден input, у которого предок td с предыдущим братом td, содержащим label с
атрибутом for, имеющим значение name
52. Приём 7. XPath для таблиц
//button[contains(@title, 'Редактировать запись')]
[./parent::td[
(./preceding-sibling::td[@headers='a3']//*[contains(text(), 'Ответчик')])
and
(./preceding-sibling::td[@headers='a2' and contains(text(), 'Петров Иван')])
and
(./preceding-sibling::td[@headers='a1' and contains(text(), 'Физическое лицо')])
]]
53. Приём 7. XPath для таблиц
Используйте переменные, чтобы найти нужную строку по заданным параметрам.