2016-03-29 4 views
0

私はオブジェクト指向のプログラミングに慣れていないので、これは真実な疑問に思えるかもしれません。なぜSelenium webdriverにグローバル変数を使用しないでください。

大部分のメソッドコードを持つクラスPageobjectを持つ基本的なエンドユーザーテストフレームワークを作成しようとしています。

私は、トップレベルでセレンドライバをインスタンス化するテストスクリプトを用意しています。

トップレベルでドライバをインスタンス化すると、それを必要とするメソッドにドライバオブジェクトを渡す必要がありますが、そのためにメソッド呼び出しに渡されるパラメータの数を最小限に抑えたい可読性。

例えば、 home_page.login(this_user)はhome_page.login(this_user、selenium_driver)より少し良く読んでいます。

私は、グローバル変数がぼやけていることを知っています。それは、すべてのメソッドが別のスコープのオブジェクトにアクセスできるということです。

+3

それはグローバルを再定義しないようにする一つのことだが、すべてのメソッドに渡す義務付ける種類のサディスティックなようです。私はグローバルを使用することはこの場合は問題ないと思います。私は機械化で同じことをしてきた –

+0

静的変数のスコープを理解している限り、ドライバに静的インスタンスを使用するのに間違いはありません。 –

+1

ドライバは1つのスレッドからしかアクセスせず、一度に1つのテストを実行し、一度に1つのブラウザしかサポートしていない限り、ドライバは本当にグローバルであり、短期間の単純さのために静的ではありません。これらの異論はあなたにとって無関係かもしれません - 私はOO *が正しく行われたと主張していますが、よりシンプルで柔軟なコードを作ることになります。 –

答えて

1

私のテストのすべてのPageオブジェクトは、すべてのPageオブジェクトを初期化するPageRepoクラスを通してアクセスします。

テストクラスが継承する基本クラスのPageRepoクラスを初期化します。これはWebDriverを初期化する場所です。

私のテストはこのように見えます。

PageRepo.HomePage()。doSomethingの()

+0

私はこの考えが好きです。したがって、テストごとにWebドライバをインスタンス化して並行性を確保できますが、Webドライバの範囲を制御することができます。これは、タドマンが何かを語っていたかもしれない。ニース、あなたはまだ私が避けようとしていたDoSomethingにパラメータを介してWebドライバを渡す必要があります。 – dkhokhar

+0

また、クラスが静的に返す最後のドライバを格納するすべてのタイプのドライバ(chrome、IEなど)を返すWebDriverFactoryクラスも使用します。 – Drew

関連する問題