大きなWebサイトのテストフレームワークを作成しています。現在、UIドライバのモデリング作業中です。私はブラウザとモバイルデバイス用のエミュレータとドライバを抽象化したUIセッションを持っています。このオブジェクトはまた、ページオブジェクトの履歴を含むブラウザセッションに関する状態情報を保持します。ページオブジェクトの先頭は現在のページです。私の問題は、私のページオブジェクトがブラウザからデータを読み込むのを遅らせることです(データを抽出したかどうかを確認するgetterで設定されたプロパティ、もしそうでなければ、現在のページかどうか、もしそうならば、ブラウザを使用してページオブジェクトにキャッシュする)が、セッションによって提供される抽象レイヤーにアクセスする必要があることを意味します。呼び出し元に基づいた呼び出し元の振る舞いを、リフレクションなしで呼び出し元をPythonでメンバーにする方法
最初の考えは、セッションをページに固定していただけですが、循環参照が作成されていますが、これは悪いことです。私はまた、ページ用の複数のインターフェースを定義しようと考えていましたが、本当にうまくいくか見えませんでした。私が本当に必要とするのは、セッションでコールを傍受し、セッションを引数としてセッションを取る隠しゲッターにページをリダイレクトさせてもらうことですが、それを行う方法を理解することはできませんでした。
情報やアクセスを得るために私がここで使用できる良い解決策やデザインパターンはありますか?私は循環参照を持たずに、または遅延読み込みを断念する必要はありません。私はインターフェイスをより複雑にしたくない場合があります。時にはメソッドを呼び出したり、同じ情報にアクセスするためにプロパティやメンバを呼び出すこともあります(その考え方は、背後の派手なフットワークを隠し、フレームワークを単純なものにすることです)。
私はCurrentPageクラスを実際に持っていますが、これはすべて、ナビゲートイベントでセッションによって設定されたクラス変数にcurrent_pageを格納しているため、current_pageを唯一の魔法のグローバルスタイルのアクセサにすることができると思います実際にページからデータを取得し、特別なインターフェイスを使用してセッションオブジェクトを格納する方法もありますが、それは私にとっては魅力的ではないようです。
誰もが何か提案がありますか?
なぜ独自のフレームワークを作成していますか?セレンなどがあなたのニーズを満たしていない理由はありますか? – Daenyth
@Daenythドメイン固有のロジックを実装するために、セレンの上にあります。前述のとおり、複数のエミュレータやブラウザドライバも抽象化しているため、同じフレームワークでモバイルテストを行うことができます。もちろん、それはポイントのそばに完全にあります... –