2015-08-11 3 views
0

В настоящее время я работаю над моделью Selenium, которая будет основана на C# .net.Нужна обратная связь по моей модели Selenium Framework

Главное, что я хотел бы узнать у всех экспертов селена, если я действительно должен построить фреймворк в C# .net? Существуют ли какие-либо реальные преимущества построения структуры в JAVA для ее создания в C# .net?

Основные ингредиенты/USP этого Каркасно

  1. Простота написания теста. Например, для нажатия на кнопку кодер должен просто написать Dom.find («# elementid»). Click(), Dom.WaitFor («# elementid») или Dom.WaitTillDisappears («# elementd») Цель этого это абстрагирование всего драйвера селена, свойств, обработки хромированного ребра и всех грязных вещей, которые слишком долго для не-опытного кодера. Для этого я создал модель, используя OOPS, определяя классы, которые обрабатывают всю инициализацию хромированного ребра и другого материала, поэтому тестеру не нужно заботиться об этом при написании кода.

  2. Я использую модульные модули тестирования, такие как единичный тест и определение абстрактных классов, которые представляют собой тестовый прогон и тестовый пример, поэтому нужно, чтобы человек, записывающий код, просто определял тестовые таблицы и записывал их сценарий под ним и запускать эти случаи как единичные тесты.

  3. Я добавил Db-журнал, который будет создавать журналы для каждого выполняемого действия, от «пытается найти элемент», чтобы «набирать что-то в элементе», поэтому, если что-то не получается, у человека есть возможность изучить журнал и выяснить, что именно пошло не так.

  4. Обработка ошибок выполняется с использованием SeleniumExceptions, и я просматриваю сообщения, чтобы сделать их более читаемыми для пользователей инфраструктуры.

  5. Я думал о создании простого абстрактного класса, скажем, PageComponents.cs, который может быть абстрактным классом и иметь базовые функции, такие как получение информации о странице, получение идентификатора, атрибутов, класса и т. Д. Лицо, предпочитающее создавать свои скрипты в POM, может просто определить все компоненты с помощью типа By, поэтому давайте скажем, что все, что им нужно сделать, - создать еще один файл класса LoginPage.cs, наследовать от PageComponents.cs, а затем просто начать объявление своих объектов. В других файлах, где пользователи будут писать свой скрипт, они могут легко получить доступ к этим объектам страницы, инициализируя LoginPage. Изменения Anything, в LoginPage, все они должны сделать, это изменить свойство объектов в LoginPage.cs

Теперь причину я пишу все это обсуждение, чтобы понять точку зрения всех людей, которые работают на селене или работали над рамкой. Я хотел бы понять все плюсы и минусы этой модели фреймворка, над которой я пытаюсь следовать, и если есть что-то лучшее, что вы, ребята, можете предложить (с которым вы уже работали), это было бы здорово. Я начинаю эту дискуссию, чтобы понять, за чем следуют другие компании и люди, которые гораздо более опытны, чем я. Заранее благодарю вас за ценные отзывы!

+2

Это была бы интересная дискуссия, но я не думаю, что SO - подходящее место для интересных дискуссий. – stuXnet

+0

Хм, вы уже пробовали какое-то поведение или подходы, основанные на тестах? Вы можете попробовать Serenity BDD (бывший thucydides) с JBehave, например, где у вас уже есть много реализованных функций, которые вы хотите реализовать (страницы, живая документация, обработка тестовых тестов и т. Д.) – spcial

+0

Привет, @stuXnet, вы думаете, я должен опубликовать это где-нибудь еще? будет ли обмен столами лучшим местом для обсуждения. Я в основном хочу получить столько отзывов, сколько могу получить. – Prateek

ответ

2

Похоже, вы проделали отличную работу. Если у вас нет особых причин для перемещения (и повторного внедрения) с C# на JAVA, мой совет не в этом. ИМХО не будет выгодно:

Строительство каркаса в JAVA над его строительством на C#.net

Концепции практически одинаковы, все функциональные возможности, которые вам нужны, могут быть найдены для поддержки обоих целевых языков.

но я не вижу BDD (для .Net is Specflow). Самое большое преимущество заключается в том, что это общая площадка для всех вовлеченных членов команды (POs, devs, QAs, BA и т. Д.) И прекрасно сочетается с

не очень опытный кодер. .... поэтому тестер не должен заботиться об этом при написании кода.

Абстракции вокруг всего водителя селеном в

, свойства, обработка chromedriver, и все грязные вещи, тот слишком долго

хороший подход. А может быть, вы разработали его дополнительно с основной концепцией Test harness - разделить тестовую логику 3 основных направлений single responsibility:

  • Испытание двигателя - не будет нести какую-либо информацию о тестируемом продукте
  • Test Data - Data driven или генерируется динамически
  • Тест Спецификация - состоит из тестовых шагов, сред и т.д. переменные

Другой хорошо бы иметь функцию является image recognition, который будет проверять макет.

Поскольку по природе все тесты пользовательского интерфейса выполняются медленно - планируете ли вы параллельно выполнять свои тесты? Если да, то this article будет хорошим местом для начала. Также возможно in-memory DB RAM optimization.

POM хорошая практика

Я думал о создании простого абстрактного класса, позволяет сказать PageComponents.cs, который может быть абстрактным классом и имеет имеют основные функции, такие как получение информации страницы, получить идентификатор, атрибуты, класс и т.д..

и если вы хотите продолжить с простотой, то LoadableComponent - это один из способов. Это даст вам хороший Information hiding, но это повредит Единой ответственности, так как оно вводит логику (клики, ожидания и т. Д.) В объекты вашей страницы (презентация не полностью отделена от модели) Действия. Но в любом случае дизайн - это вопрос компромиссов.

+0

Спасибо за такую ​​подробную обратную связь, экостадинов. Действительно ценю это. Я буду смотреть в BDD, а также о жгуте испытаний и единой ответственности и концепт 1. Я создал следующий классов: SeleniumTest- абстрактного класса, который инициирует тестовый прогон. Этот класс просто инициирует webdriver и передает объект-драйвер другим конструкторам классов-помощников. Это можно считать [TestFixture] в языке nunit – Prateek

+0

SeleniumTestCase - это абстрактный класс, в котором тестер будет писать весь свой скрипт для определенного тестового файла или для определенной страницы. Абстрактный класс имеет базовые функции, такие как шаги регистрации, метательные ошибки и т. Д., Которые будут полезны при написании сценария. DomWrapper - это класс, используемый для определения всех методов, необходимых для поиска определенного элемента на странице с использованием концепции DOM. Такие вещи, как Find, Waitfor, waittodisappear подходят здесь – Prateek

+0

DomElement - это тип класса i, созданный для элемента страницы, поэтому любой элемент страницы является DomElement. В этом типе пользователь имеет возможность доступа к свойствам элемента, таким как класс, идентификатор и т. Д., А также использовать такие функции, как Findchild, click, sendkeys и т. Д. DBOperations - это класс, который имеет функции для регистрации состояния дел и т. Д. В основном, протоколирование БД в тестовых случаях обрабатывается этим классом – Prateek