В интернетах не так много гайдов, как можно освоить нативную мобильную автоматизацию. Многие отказываются от этой затеи, потому что сложно. Поэтому я решил написать цикл статей, которые на мой взгляд, могут помочь в освоении этого ремесла.  В первую очередь, хочется уточнить, что в дальнейшем мы будем рассматривать автоматизацию на нативном фреймворке (Espresso) и надстройками над ним (Kaspresso, Ultron), а не вот эти ваши appium'ы. На мой взгляд, работа с нативным инструментом дает больше скиллов и преимуществ на длинной дистанции (если фреймворк можно применить к вашей задаче), но то мое имхо. Внимание: Данная статья нацелена на людей, которые не знают с чего начать свой путь в андроид автоматизацию, у кого нет знаний языка программирования Kotlin. Собственно, давайте перейдем сразу к делу и обсудим, что вам нужно сделать на этом пути в первую очередь. Самая база-баз, которую вам нужно освоить - это язык программирования kotlin. Почему не java? Потому что есть более удобный и перспективный kotlin и большинство компаний на рынке имеют стек на этом языке. Kotlin построен на основе Java, поэтому тестировщикам с опытом работы с Java будет легче освоить Kotlin. Многие моменты в изучении kotlin будут более понятны и пойдут проще. Но если таких знаний или опыта нет, то это не приговор. Все можно изучить при должном подходе и мотивации. "Ну, вот, kotlin... Там же много чего, что учить - не понятно". Такие заявления я слышал ни раз и ни два. Поэтому давайте рассмотрим тот kotlin core, который по моему мнению, будет достаточен. Переменные, константы и их инициализация, отложенная инициализация Условные операторы Циклы Ссылочные типы Nullable типы Массив Функции Классы, конструкторы, объекты Наследование Ключевое слово this Ключевое слово override Ключевое слово super Getter/Setter Модификаторы доступа Data class Nested, Inner классы Расширения Интерфейсы Абстрактные классы Анонимный класс Companion object is, as приведение типов Сравнение объектов и значений Enum класс Коллекции в Kotlin (Mutable, read-only) Set, List, Map, Sequence + их интерфейсы Работа с коллекциями: сортировка разных типов, перебор Generics Лямбда выражения, Анонимные функции, Функции высшего порядка Scope-функции Да, списочек немаленький, но здесь все, что действительно пригодится при применении правильных подходов в написании автоматизированных тестов и инфраструктуры под них. Если вы действительно хотите понять, что написано в коде вашими коллегами и программистами, а не копипастить код в свои тесты, то это ваш выбор. Давайте немного подробностей про каждый пункт: Переменные, константы и их инициализация, отложенная инициализация Надо знать/уметь: различие между val (неизменяемая переменная) и var (изменяемая переменная). инициализация переменных при их объявлении или позже с использованием конструктора или метода init. как объявлять и использовать константы с помощью ключевого слова const. как использовать ключевое слово lateinit для отложенной инициализации переменных. разобраться с инициализаций через делегат. Условные операторы Надо знать/уметь: использование ключевых слов if, else if и else для выполнения различных блоков кода в зависимости от условий. использование оператора when для сопоставления значения переменной с различными вариантами. Обратите внимание на использование диапазонов и оператора in в операторе when. Оператор when в Kotlin позволяет сопоставлять значение переменной с несколькими вариантами. Циклы Надо знать/уметь: цикл for для итерации по диапазону или коллекции. использование циклов while и do-while для выполнения блока кода до выполнения определенного условия. Обратите внимание на операторы break и continue для управления выполнением цикла. Ссылочные типы Надо знать/уметь: разницу между ссылочными и примитивными типами данных (В отличии от Java (где есть примитивные типы и ссылочные) – в Kotlin нет примитивных типов данных, все типы – объектные (ссылочные)). String Long/Int/Short/Byte Double/Float Char Boolean нужно посмотреть методы каждого класса и понимать, что можно делать с таким типом. Nullable типы Надо знать/уметь: что такое nullable типы и как они отличаются от ненулевых типов. рассмотрите безопасный вызов (?.) для обращения к свойствам и вызова методов nullable типов. обратите внимание на использование оператора утверждения о ненулевом значении (!!) в случаях, когда вы уверены, что значение не является null. Массив Надо знать/уметь: как создавать и инициализировать массивы различных типов данных. как получить доступ к элементам массива по индексу и изменение значений элементов. Функции Надо знать/уметь: как объявлять функции с помощью ключевого слова fun. передачу аргументов в функции и возвращение значений. Обратите внимание на параметры функции по умолчанию и именованные аргументы. Классы, конструкторы, объекты Надо знать/уметь: как объявлять классы и использовать конструкторы. различные типы конструкторов, такие как основные, вторичные и конструкторы с параметрами по умолчанию. Обратите внимание на использование ключевого слова object для создания объектов класса. Наследование Надо знать/уметь: как использовать наследование для создания подклассов из существующих классов. ключевое слово super для обращения к родительскому классу из подкласса. Ключевое слово this Надо знать/уметь: использование ключевого слова this для обращения к текущему экземпляру класса. различные сценарии использования this, например, для разрешения конфликта имен между параметрами и свойствами класса. Ключевое слово override Надо знать/уметь: использование ключевого слова override для переопределения методов и свойств из родительского класса. правила и ограничения переопределения. Ключевое слово super Надо знать/уметь: использование ключевого слова super для обращения к методам и свойствам родительского класса. как super используется в конструкторах подклассов. **Getter/Setter ** Надо знать/уметь: как использовать геттеры и сеттеры для доступа к свойствам класса. особенности работы с геттерами и сеттерами, такие как вычисляемые свойства и модификаторы доступа. Модификаторы доступа Надо знать/уметь: различные модификаторы доступа в Kotlin, такие как private, protected, internal и public. как модификаторы доступа влияют на видимость классов, свойств и функций. Data class Надо знать/уметь: использование data class для создания классов, предназначенных для хранения данных. возможности, предоставляемые data class, такие как автоматическая генерация методов equals(), hashCode() и toString(). Nested, Inner классы Надо знать/уметь: разницу между nested и inner классами. доступ к членам внешнего класса из nested и inner классов. Расширения Надо знать/уметь: как использовать расширения для добавления новых функций и свойств к существующим классам. возможности расширений и их ограничения. Интерфейсы Надо знать/уметь: использование интерфейсов для определения контрактов, которым должны соответствовать классы. изучить реализацию интерфейсов классами и множественное наследование интерфейсов. Абстрактные классы Надо знать/уметь: использование абстрактных классов для определения общей структуры классов и невозможности создания экземпляров абстрактного класса. рассмотреть абстрактные методы и свойства, которые должны быть реализованы в подклассах. Анонимный класс Надо знать/уметь: создание анонимных классов без явного определения подкласса. использование анонимных классов для реализации интерфейсов или расширения классов. Companion object Надо знать/уметь: использование companion object для создания статических методов и свойств в классе. как companion object может быть использован для создания фабричных методов или доступа к общим ресурсам. is, as приведение типов Надо знать/уметь: использование оператора is для проверки типа объекта и оператора as для явного приведения типов. безопасное приведение типов с использованием оператора as?. Сравнение объектов и значений Надо знать/уметь: разницу между сравнением объектов и значений. использование операторов сравнения == и ===. Enum класс Надо знать/уметь: использование enum классов для определения ограниченного набора значений. использование свойств и методов в enum классах. Коллекции в Kotlin (Mutable, read-only) Надо знать/уметь: понимать разницу между изменяемыми (mutable) и неизменяемыми (read-only) коллекциями. изучить основные типы коллекций, такие как List, Set и Map. Set, List, Map, Sequence + их интерфейсы Надо знать/уметь: основные операции и функции, доступные для Set, List, Map и Sequence. различия между разными реализациями этих интерфейсов. Работа с коллекциями: сортировка разных типов, перебор Надо знать/уметь: методы и функции, доступные для сортировки коллекций разных типов. итерацию и перебор элементов коллекций. Generics Надо знать/уметь: использование обобщений для создания универсальных классов и функций. ограничения типов и варианты проекции. Лямбда выражения, Анонимные функции, Функции высшего порядка Надо знать/уметь: использование лямбда выражений, анонимных функций и функций высшего порядка. изучите передачу функций в качестве аргументов и их возвращение из других функций. Scope-функции Надо знать/уметь: использование scope-функций (let, run, with, apply, also) для работы с объектами в ограниченной области видимости. различия между разными scope-функциями и их применение в разных ситуациях. Для тех, кому нужны видосики и чтоб разжевали, могу порекомендовать те ресурсы, которыми пользовался я (не реклама): Javabegin - тут надо найти Kotlin, как часть огромного курса фуллстак разработчика. Материал очень хорошо записан, но платно. Stepik - Kotlin - быстрый старт - тоже платный курс, но оно того стоит. developer.alexanderklimov - как доп ресурс к курсам или сурс для самообучения. (бесплатно) Metanit - как доп материал, очень хорошо описано. (бесплатно) Руководство по языку Kotlin - переводы оф. документации. (для кого-то это лучший сурс для самообучения) (бесплатно) Kotlin за час. Теория и практика. - как доп материал для тех, кто писал на java (бесплатно) Курс обучения Kotlin с нуля - курс по котлин с нуля (бесплатно) Самое важное, если вы берете курсы, то там будет некая практика по ходу прохождения видео. Если вы учитесь сами, то проще брать легкие задачи на сайтах по типу Leetcode и CodeWars и по чуть-чуть решать. Этого всего вам хватит, чтобы освоить темы, описанные выше. После прохождения одного из курсов, можно будет приступать к освоению андроида и тестового фреймворка. Об этом мы поговорим в следующей статье. QA android automation