Подход для покрытия Watir-Webdriver на сайте с большим количеством клиентов


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

Я выложу свои вопросы вперед, на всякий случай, если я потеряю ваше внимание во время описания ниже:

  • Вы уже писали подобный продукт раньше? Как вы к этому подошли?

  • Выделяются ли какие-либо из этих подходов как великие / ужасные для любого причина? Если да, то что?

  • Есть ли другой подход, который вы могли бы найти больше уместно?

Есть рабочий процесс, который я тестирую, для аргументации мы назовем его корзиной покупок, которая состоит из различных text_fields, radio_buttons и select_lists. одна компания предоставляет эту корзину для ~60 клиентов, и не все клиенты используют одни и те же точные формы, но общий процесс одинаков. Общая идея одинакова между клиентами (одинаковая целевая функциональность) , и есть подмножества клиентов с одинаковым рабочим процессом, но многие из них уникальны. В этом случае unique может означать, что некоторые поля не требуются, в то время как они могут быть для других клиентов. Или же для одного клиента существуют определенные вопросы/поля text_fields, которые другие не могут использовать вообще.

Цель скрипта на данном этапе-просто генерировать заказ через веб-интерфейс, а не проверять каждый отдельный шаг процесса как "тест". Здесь тебе придется мне немного довериться. Есть еще много общих деталей, которые можно запустить отрицательные / крайние случаи с приемлемым уровнем точности.

Подходы, которые я вижу до сих пор:

  1. Используя шаблон объекта page, создайте файл "page" для каждого клиентского сайта и используйте различные классы страниц в зависимости от того, какой клиент тестируется. Это утомительно, в основном хрупко и требует много работы для поддержания. Тем не менее, это будет работать, и я мог бы использовать одну и ту же функцию/сценарии для всех, пока их конкретный файл подкачки был доступен.

  2. Создать а метод, чтобы очистить все входные элементы из DOM, определить, являются ли они зарезервированным полем, в которое нам нужно ввести определенный требуемый ввод, или просто заполнить информацию, чтобы получить заказ для завершения. Это не накладывается на БД, поэтому производительность должна быть лучше в целом.

  3. Подключитесь к БД, соберите всю информацию, необходимую конкретному клиенту, используемому для построения своих страниц, и динамически создайте поля для заказа, и ответьте на них соответствующим образом. Этот звук Великий в теории, потребовал бы очень мало, если вообще какое-либо обслуживание. ДБ выскабливание легко, сложность построения полей мне пока неизвестна...

Прямо сейчас я использую: watir-webdriver огурец Страница Чизи-объект драгоценный камень продолжение

1 3

1 ответ:

Я бы использовал page-object Чизи и включил все поля/вопросы, которые можно было бы включить. затем я бы перегрузил значения по умолчанию для каждого клиента, включая только поля / вопросы, которые они используют. Надеюсь, я не слишком упрощаю ситуацию.

Обновление: В заполнителе страниц он будет объединять все, что вы отправляете данные (в виде хэша) с данными по умолчанию. В своем посте default data post он показывает, как использовать данные по умолчанию. Я думаю, что вы можете создать класс checkout Страница

 class CheckoutPage
  include PageObject

  text_field(:name, :id => “order_name”)
  text_field(:address, :id => “order_address”)
  text_field(:email, :id => “order_email”)
  select_list(:pay_type, :id => “order_pay_type”)
  button(:place_order, :value => “Place Order”)

  PageObject::PageFactory.routes = {
    :default => [[HomePage, :select_puppy],
                 [DetailsPage, :add_to_cart],
                 [ShoppingCartPage, :continue_to_checkout],
                 [CheckoutPage, :complete_order]]
  }

  def complete_order(data = {})
     data = DEFAULT_DATA.merge(data)
     self.name = data['name']
     self.address = data['address']
     self.email = data['email']
     self.pay_type = data['pay_type']
     place_order
   end
 end

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

class Nordies < CheckoutPage
      DEFAULT_DATA = {
        ‘name’ => ‘cheezy’,
        ‘address’ => ‘123 Main Street’,
        ‘email’ => ‘cheezy@example.com’,
        ‘pay_type’ => ‘Purchase order’
      }

PageObject::PageFactory.routes = {
  :default => [[HomePage, :select_puppy],
               [DetailsPage, :add_to_cart],
               [ShoppingCartPage, :setup_creditcard],
               [CreditCardPage, :continue_to_checkout],
               [CheckoutPage, :complete_order]]
}
end

Затем .complete_order будет отличаться для каждого поставщика.