3

わかりました、私はこの思考プロセスを後押しする必要があります-私の脳は痛いです。いくつかのアプローチについてフィードバックをお寄せください。

以下の説明で注意を失った場合に備えて、質問を前もって投稿します。

  • 以前に同様の製品のスクリプトを作成したことがありますか?どのようにアプローチしましたか?

  • これらのアプローチのいずれかが、何らかの理由で素晴らしい/ひどいものとして際立っていますか?もしそうなら、何ですか?

  • より適切だと思う別のアプローチはありますか?

私がテストしているワークフローがあります。議論のために、さまざまなtext_fields、radio_buttons、select_listsで構成されるショッピングカートと呼びます。 ある会社がこのショッピングカートを最大60のクライアントに提供しており、すべてのクライアントが同じ正確なフォームを使用しているわけではありませんが、一般的なプロセスは同じです。一般的な考え方はクライアント間で同じであり(同じターゲット機能)、まったく同じワークフローを持つクライアントのサブセットがありますが、多くは一意です。このシナリオでは、一意とは、特定のフィールドが不要であり、他のクライアント用である可能性があることを意味する場合があります。または、特定の質問/ text_fieldsが1つのクライアントに存在し、他のクライアントはまったく使用できません。

この時点でのスクリプトの目的は、プロセスの個々のステップを「テスト」として検証することではなく、Webインターフェイスを介して注文を生成することです。ここで私を少し信頼する必要があります。ネガティブ/エッジケースを許容可能なレベルの精度で実行できるようにするための一般的な詳細はまだたくさんあります。

私がこれまでに見たアプローチは次のとおりです。

  1. ページオブジェクトパターンを使用して、クライアントサイトごとに「ページ」ファイルを作成し、テストするクライアントに応じて異なるページクラスを使用します。これは退屈で、ほとんどが壊れやすく、維持するのに多くの作業が必要です。ただし、それは機能し、特定のページファイルにアクセスできる限り、すべての人に同じ機能/シナリオを使用できます。

  2. DOMからすべての入力要素を取得するメソッドを作成し、それらが特定の必要な入力を挿入する必要がある予約済みフィールドであるかどうかを検出するか、注文を完了するために情報を入力するだけです。これはDBに便乗しないため、全体的にパフォーマンスが向上するはずです。

  3. DBに接続し、ページの作成に使用される特定のクライアントに必要なすべての情報を収集し、注文のフィールドを動的に作成して、それに応じて回答します。これは理論的には素晴らしいように聞こえますが、メンテナンスはほとんど必要ありません。DBのスクレイピングは簡単ですが、フィールドの構築の難しさはまだ私にはわかりません...

現在使用しているもの: watir-webdriverキュウリCheezyのページオブジェクトgem続編

4

1 に答える 1

3

cheezyのページオブジェクトを使用して、含めることができるすべてのフィールド/質問を含めます。次に、使用するフィールド/質問のみを含む、各顧客のデフォルト値をオーバーロードします。うまくいけば、私はそれを過度に単純化しませんでした。

更新:ページポピュレーターでは、データが(ハッシュとして)送信するものはすべてデフォルトデータとマージされます。彼のデフォルトのデータ投稿では、デフォルトのデータの使用方法を示しています。クラスのチェックアウトページを作成できると思います

 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はベンダーごとに異なります。

于 2012-04-05T20:34:48.713 に答える