Stepik is an educational platform for computer science.
Автоматизация тестирования с помощью selenium и python
Мы сделали этот курс, так как любим пользоваться качественными стабильными сервисами с удобными интерфейсами и продуманным UX дизайном, и хотим, чтобы благодаря вам и нам таких сервисов становилось больше.
Автоматизация UI-тестирования (тестирования интерфейсов) позволяет сократить время проведения регрессионного тестирования и получить больше уверенности в качестве продукта перед его релизом в продакшн. Также автоматизированные регрессионные тесты оставляют нам, тестировщикам, больше времени, чтобы более полно тестировать новую функциональность в продуктах.
Обратите внимание, что этот курс не затрагивает основы программирования, так что предлагаем вам изучить Python самостоятельно на следующих курсах:
Благодарности
Выражаем благодарность команде PyCharm за оказанную помощь и качественное ядро.
Зависимость плагинов

На картинке изображены все известные нам образовательные плагины от JetBrains, а также Стэпик плагин и его зависимости. Сиреневым показаны плагины для PyCharm. Видно, что нашему плагину для работы необходимо ещё 3 плагина. Зависимость от Python ещё правильно не настроена (поэтому его приходится устанавливать вручную).
И остаётся самая главная зависимость от ядра: текущие изменения в ядре ещё не залиты на официальный репозиторий, поэтому придётся устанавливать вручную нестабильную версию. И в таком случае плагины Edu-Java и Edu-Kotlin у вас пока что работать не будут.
Назначение плагина
Зачем мы его делали? Разумеется, чтобы упростить жизнь студентам, не заставлять выполнять их рутинные операции, позволить полностью сконцентрироваться на процессе обучения.
Первая трудность, с которой сталкивается студент при прохождении курса по программированию на платформе, это необходимость копипаста в браузер из IDE. Программировать в браузере нелегко: нельзя запустить код и проверить его локально, нет автодополнения и рефакторинга и многого другого.
Вторая трудность — это проблема организации кода в проекте. Студенты, набирая код в песочнице, как правило решают только текущую задачу и не задумываются над тем, где они будут решать следующую задачу. И скорее всего, студент либо не сохраняет предыдущие решения, либо файлы у него называются наподобие “new_file” “new_file7” “new_file777”. Всё это усложняет навигацию и затрудняет переиспользование кода.
Новый ui
Первое, что мы добавили — это авторизацию в настройках, а-ля GitHub.
Но, если вы всё-таки пропустите это действие, то встретите более навязчивую авторизацию.
При построении проекта можно выбрать курс из списка курсов, на которые вы подписаны. Но это не значит, что все они совместимы с плагином. Чтобы курс создался без ошибок, в нём должен быть хоть один шаг с задачей на программирование.
В этом окне вы можете выбрать желаемый язык программирования, но если он не будет доступен, то будет выбран наиболее популярный.
Ещё есть возможность выгрузить курс по ссылке, при этом, если вы не были ранее подписаны на курс, происходит подписка. В поле для ссылки можно вводить как id курса, так и любую ссылку из курса.
Статус шага отображается в дереве проекта:
А основные действия находятся на панели Task Description справа.
Среди них: отправка решения, предыдущий/следующий шаг, начать сначала (пока недоступно), загрузка последнего решения и смена языка.
Планы на будущее
В ближайшей перспективе мы хотим развивать поддержку разных языков программирования. На данный момент достаточно легко в Stepik Union можно добавить R, Scala, но, например, поддержка Haskell ещё слишком сырая. А с С сложнее, тут придется писать отдельный плагин для CLion.
Кроме того, мы рассматриваем осуществление поддержки плагином других типов задач.
Построение дерева проекта
Построение дерева проекта сильно изменилось относительно первой версии плагина, но слабо относительно ядра.
Процесс разработки
В июне этого года мы выпустили плагин, который поддерживал только Java, авторизовывался в менеджере проектов и взаимодействовал со my-sertif.ru с помощью контекстных меню. Но он обладал и существенными недостатками в архитектуре.
Как удобной для изучения программирования платформе нам важно поддерживать как можно больше языков программирования. А плагин условно можно разделить на две части: независимую от поддерживаемого языка (авторизация, взаимодействие с API, настройки) и непосредственно поддержку языка (в основном, построение проекта).
Так как старый плагин был монолитным, рациональным образом добавить поддержку новых языков и писать новые плагины для других IDE не было возможности. Поэтому, было решено перейти на ядро обучающих плагинов от команды PyCharm.
Совместимость
У my-sertif.ru пока что нет API для того, чтобы понимать, совместим ли конкретный курс со сторонним приложением, поэтому полезно представлять как всё работает.
После авторизации плагин скачивает дерево проекта, для этого он собирает информацию о всех шагах в открытой части курса. Затем он сохраняет данные только для поддерживаемых шагов. На данный момент это только задачи типа “code”. Однако, данный тип задач обладает особенностью — в нем используются скрытые шаблоны.
Рассмотрим на примере Java. С помощью шаблонов преподаватель может создавать задания на реализацию отдельного метода, а обёртка метода в класс происходит уже на сервере. Таким образом, у студента не будет компилироваться правильное решение, потому что весь код Java обязан быть в классе.
Но хорошие новости в том, что таких задач не так уж и много. Они чаще всего встречаются в языковых курсах.Поэтому плагин идеально подходит для курса по алгоритмам и Hadoop.
Сохранение пользовательских данных
Чтобы пользовательские данные не терялись при перезапуске, их необходимо сохранять. Для этого в IDEA есть интерфейс
PersistentStateComponent
, с помощью которого можно сериализовать в .xml интересующий вас класс. В документации это не указано, но подразумевается, что класс, реализующий
PersistentStateComponent
, — это синглтон, который нужно инстанцировать одним из трёх способов, по уровню компоненты: Application level, Project level и Module level.
В первом случае синглтон будет единственный на весь плагин, и разумно в нём хранить глобальные настройки.В остальных случаях синглтонов может быть много и сериализоваться они будут в ./.idea. Именно на уровне проекта мы храним пользовательские данные (имя, токен и прочее), и почти всю мета информацию о курсе.
Резонный вопрос — где тогда хранить данные, если ни один проект не открыт? На такой случай в IDEA существует defaultProject, получить который можно так:
ProjectManager.getInstance().getDefaultProject()Заключение
Будем рады ответить на вопросы, получить обратную связь, предложения и конструктивную критику по плагину в комментариях и в
Ссылки:my-sertif.ru plugins, StepikOrg/intellij-community, Stepik API doc, IntelliJ Platform SDK Documentation, Repository for IntelliJ Platform SDK Documentation.
