2017-11-06 13 views
0

seleniumとjavaを使用したPage Object Model Automationの新機能です。私はページオブジェクトモデルを使用しており、各ページを単一のクラスとして持ち、そのページ内のアクションをメソッドとして持っています。 フォームを送信するときに表示される簡単なポップアップのために、別のページオブジェクトを記述する必要があります。このポップアップはサービスタイプを選択するために使用され、選択に基づいて正しいフォームが次に開かれます。私は、このポップアップの前後にページのための 'ページオブジェクト'を持っています。しかし、私はちょうどオプションを選択し、次のボタンをクリックするための直接コードを挿入しました。このポップアップ用の別のページオブジェクトクラスを作成する必要があります(これはページではありません)。ポップアップには3つのオプションがあり、進むには[次へ]ボタンがあります。ポップアップはIDロケーターを持ち、他のウェブページで発生する可能性があるならば、私は独自のページオブジェクトに入れてしまう選択ドロップダウンでポップアップ用の別のページオブジェクトを記述する必要がありますか?

答えて

2

this Martin Follower's article - Page Objectをお読みください。

引用:用語「ページ」オブジェクトにもかかわらず

、これらのオブジェクトは通常 は、各ページのために構築されるべきものではなく、ページ上の重要な要素のため

想像しますページには十数個のタブやパネルなどがあり、それぞれにはいくつかのフィールド、ボタンなどがあります。そのようなページのために巨大なクラスを作成することは実用的ではなく、確かに300-500行以上のコードが必要です。そのようなクラスは維持するのが非常に難しいでしょう。

それはいくつかの小さなクラス(ページオブジェクト)、ページの特定のセクションのそれぞれ、少数の要素、コードの各せいぜい50〜100行を含む各1を作成するには、(私の意見では)良いでしょう。我々はこれらのクラスをページフラグメントの代わりにページオブジェクトと呼ぶが、コンセプトは同じである。

しかし、それは人によって異なり、誰もがこのトピックについて異なる意見を持っているかもしれません。

1

が、多くの場合、ポップアップは、現在のページに直接接続されているためだろうそのページのオブジェクト定義に含まれるほうがよい。

私はそれを別のページオブジェクトに入れることを検討する唯一の理由は、他のページで使用されていて、同じロケータを使用した場合、そのロケータが変更された場合と同様に、ポップアップを参照する他のすべてのページオブジェクトを検索して固定するのではなく、

1

私はBillに同意しますが、ポップアップを少し違った形で処理します。ページ固有のポップアップであれば、同じクラス内の自分のページオブジェクトとして持っています。

たとえば、ダッシュボードページに固有のポップアップがあり、ダッシュボードページに固有のポップアップがあり、Webアプリケーションのどこにも見つからない場合は、ダッシュボードページオブジェクト内の独自のクラスにします。私はこれを行う

理由は、私ははるかに読みやすいアプリケーションの特定の領域は、独自のオブジェクト内の「コンテナ」のときのテストを見つけることです。次に、ポップアップを開いて操作を行うと、「popup.SetValue」対「dashboard.SetValue」などのようになります。このようにすると、ダッシュボードのテストとは対照的に、ポップアップの操作を行っていることがわかります。ポップアップがアプリケーション全体で普及していると私はそれ自身のPageオブジェクトにそれを作ることをお勧めeasiliy再利用することができた場合

1

本当に難しくて速いルールではありません。他の人が述べたように、ページオブジェクトはページである必要はありません。実際には、ダイアログやヘッダーやフッターなどの再利用可能な機能の一部でなければなりません。私が書いた自動化のために、ダイアログは別のページオブジェクト(実際には別のファイル)であるという規則に従うことにしました。

私のクラス*ページはページ(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ページクラスを作成することも考えましたが、ダイアログがたくさんある大きなページを取得すると、ファイルが大きくなります。私はそこにすべての重要なビットを維持しながら、合理的に可能な限りファイルサイズを小さく保つことを好みます。ファイルをページやダイアログに分割し、それらを分離させることは、オブジェクトをよりクリーンに保ちながらページオブジェクトモデルの原則を維持します...少なくとも私の意見では。

関連する問題