seleniumとjavaを使用したPage Object Model Automationの新機能です。私はページオブジェクトモデルを使用しており、各ページを単一のクラスとして持ち、そのページ内のアクションをメソッドとして持っています。 フォームを送信するときに表示される簡単なポップアップのために、別のページオブジェクトを記述する必要があります。このポップアップはサービスタイプを選択するために使用され、選択に基づいて正しいフォームが次に開かれます。私は、このポップアップの前後にページのための 'ページオブジェクト'を持っています。しかし、私はちょうどオプションを選択し、次のボタンをクリックするための直接コードを挿入しました。このポップアップ用の別のページオブジェクトクラスを作成する必要があります(これはページではありません)。ポップアップには3つのオプションがあり、進むには[次へ]ボタンがあります。ポップアップはIDロケーターを持ち、他のウェブページで発生する可能性があるならば、私は独自のページオブジェクトに入れてしまう選択ドロップダウンでポップアップ用の別のページオブジェクトを記述する必要がありますか?
答えて
this Martin Follower's article - Page Objectをお読みください。
引用:用語「ページ」オブジェクトにもかかわらず
、これらのオブジェクトは通常 は、各ページのために構築されるべきものではなく、ページ上の重要な要素のため
想像しますページには十数個のタブやパネルなどがあり、それぞれにはいくつかのフィールド、ボタンなどがあります。そのようなページのために巨大なクラスを作成することは実用的ではなく、確かに300-500行以上のコードが必要です。そのようなクラスは維持するのが非常に難しいでしょう。
それはいくつかの小さなクラス(ページオブジェクト)、ページの特定のセクションのそれぞれ、少数の要素、コードの各せいぜい50〜100行を含む各1を作成するには、(私の意見では)良いでしょう。我々はこれらのクラスをページフラグメントの代わりにページオブジェクトと呼ぶが、コンセプトは同じである。
しかし、それは人によって異なり、誰もがこのトピックについて異なる意見を持っているかもしれません。
が、多くの場合、ポップアップは、現在のページに直接接続されているためだろうそのページのオブジェクト定義に含まれるほうがよい。
私はそれを別のページオブジェクトに入れることを検討する唯一の理由は、他のページで使用されていて、同じロケータを使用した場合、そのロケータが変更された場合と同様に、ポップアップを参照する他のすべてのページオブジェクトを検索して固定するのではなく、
私はBillに同意しますが、ポップアップを少し違った形で処理します。ページ固有のポップアップであれば、同じクラス内の自分のページオブジェクトとして持っています。
たとえば、ダッシュボードページに固有のポップアップがあり、ダッシュボードページに固有のポップアップがあり、Webアプリケーションのどこにも見つからない場合は、ダッシュボードページオブジェクト内の独自のクラスにします。私はこれを行う
理由は、私ははるかに読みやすいアプリケーションの特定の領域は、独自のオブジェクト内の「コンテナ」のときのテストを見つけることです。次に、ポップアップを開いて操作を行うと、「popup.SetValue」対「dashboard.SetValue」などのようになります。このようにすると、ダッシュボードのテストとは対照的に、ポップアップの操作を行っていることがわかります。ポップアップがアプリケーション全体で普及していると私はそれ自身のPageオブジェクトにそれを作ることをお勧めeasiliy再利用することができた場合
。
本当に難しくて速いルールではありません。他の人が述べたように、ページオブジェクトはページである必要はありません。実際には、ダイアログやヘッダーやフッターなどの再利用可能な機能の一部でなければなりません。私が書いた自動化のために、ダイアログは別のページオブジェクト(実際には別のファイル)であるという規則に従うことにしました。
私のクラス*ページはページ(LoginPage.csなど)、*ダイアログ(例:AddImageDialog.cs)のダイアログに名前をつけています。 、*パネル用のパネル(例:HeaderPanel.cs)など。
ダイアログが特定のページにのみ存在する場合は、ベースページ名に基づいて名前を付けました。 ProductDetailsPage_AddImageDialog.cs。ファイルのリストを見るとアルファベット順にソートされるので、製品の詳細ページに関連するすべてのページオブジェクトがソートされるので、そのページに関連付けられているページオブジェクトの数やあります。以下にいくつかの例を示します。リストを見て、どのページオブジェクトが特定のページに関連付けられているか、どのページオブジェクトが関連付けられていないかを素早く判断できます。
HeaderPanel.cs
LoginDialog.cs
ProductDetailsPage.cs
ProductDetailsPage_AddImageDialog.cs
ProductDetailsPage_AddTextDialog.cs
ProductDetailsPage_SaveCompleteDialog.cs
ProductDetailsPage_SaveYourProjectDialog.cs
サイト全体(1ページに関連付けられていない)に複数回ダイアログが表示される場合は、スタンドアロンページオブジェクトとして指定します。 LoginDialog。
私は、ダイアログ、パネルなどの後でページオブジェクトの名前を付けるのに使用しましたが、50ページのオブジェクトを取得した後、特定のダイアログがどこにあるかを覚えていないので、_ネーミングスキームを考え出し、 。
また、ProductDetailsPageページクラス内でAddImageDialogページクラスを作成することも考えましたが、ダイアログがたくさんある大きなページを取得すると、ファイルが大きくなります。私はそこにすべての重要なビットを維持しながら、合理的に可能な限りファイルサイズを小さく保つことを好みます。ファイルをページやダイアログに分割し、それらを分離させることは、オブジェクトをよりクリーンに保ちながらページオブジェクトモデルの原則を維持します...少なくとも私の意見では。
- 1. はあなたが別のデバイスのために別のレイアウトを記述する必要がありますか?
- 2. SQLでクエリを記述する必要があります
- 3. SpannableStringが必要ですか、別のソリューションを選択する必要がありますか?
- 4. 拡張クラスのコンストラクタを記述する必要がありますか?
- 5. TypeScriptモジュールのTypeScript定義を記述する必要がありますか?
- 6. 角度material2コンポーネントのラッパーを記述する必要がありますか?
- 7. ブーストグラフライブラリで頂点記述子を追跡する必要がありますか?
- 8. Linuxでc#を選択する必要がありますか?
- 9. Visual Studio 2008マクロはVB.Netで記述する必要がありますか?
- 10. 異なるOSごとに別々のUIコードを記述する必要がありますか?
- 11. クラスのヘッダーファイルにプライベートメソッドを記述する必要はありますか?
- 12. 方法 - 最初のダイナミックドロップダウンを2番目のドロップダウンから選択する必要がありますか?
- 13. セレンでemを選択する必要があります
- 14. ドロップダウンからの複数の選択は、同じ操作を実行する必要があります - jQuery
- 15. 選択フィールドを2回クリックして別の選択フィールドを入力する必要があります
- 16. 私は選択する必要がありますインデックス(MySQLの)
- 17. selenium webdriverのドロップダウンからオプションを選択する方法。要素は「選択」要素ではありません
- 18. なぜデリゲート宣言には識別子を記述する必要がありますか?
- 19. JSON.parse(JSON.stringify(data))を記述する必要があるのはなぜですか?
- 20. UUIDはサービス、特性、記述子のために区別される必要がありますか?
- 21. 名前のないパラメータは、空の名前「_」を使用して記述する必要がありますか?
- 22. .netからPDFを印刷し、出力用に別のトレイを選択する必要があります
- 23. Iamは、ドロップダウン選択オプションとしてbootstrap-multiselect.jsを使用していますが、一定の制限値のチェックボックスを選択する必要があります..
- 24. 選択したテキストをスクランブルする必要があります
- 25. VPSのKVMまたはOpenVZを選択する必要がありますか?
- 26. jquery mobile:選択メニューは2回選択する必要があります
- 27. Nettyハンドラ、オーバーライド時にsuper.channelRead()を記述する必要があります。そのジョブは何ですか?
- 28. ソケットへの読み書きにファイル記述子またはストリームを使用する必要があります
- 29. 私はどのItemControlを選択する必要がありますか?
- 30. FIWARE - IDAS:どのIoT-Agentsプロトコルを選択する必要がありますか?