問題タブ [pageobjects]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
38254 参照

python - 循環インポートステートメントを解決するPythonの方法は?

不安なコードを継承しました。サイトのWebページに対応するクラスでいっぱいのテストライブラリがあり、各Webページクラスにはそのページの機能を自動化するメソッドがあります。

リンクされたページのクラスを返す、ページ間のリンクをクリックするメソッドがあります。簡単な例を次に示します。

ファイルhomePageLib.py:

ファイルcalendarLib.py:

これにより、スクリプトファイルがページをクリックし、そのメソッドからの戻り値としてオブジェクトを取得できるようになります。つまり、スクリプトの作成者は、サイト内を移動するときに新しいページをインスタンス化し続ける必要がなくなります。(これは奇妙なデザインのように感じますが、「clickSomeLink」という名前のメソッドを使用して結果のページのオブジェクトを返すのは奇妙に思える以外は、理由を正確に把握することはできません。)

次のスクリプトは、スクリプトがサイト内を移動するprint page方法を示しています(ページオブジェクトがどのように変化するかを示すために挿入しました)

スクリプトファイル:

これにより、次の出力が生成されます。

ですから、私が特に不安を感じているのは、from ____ import ____全体に行き渡る線です。これらは、次の理由で私を悪いと思います。

  1. 私はいつも、すべてのインポートステートメントをファイルの先頭に置くことを慣例にしています。
  2. ページへのリンクが複数ある可能性があるためfrom foo import bar、ファイル内の複数の場所に同じコード行が表示されます。

問題は、これらのインポートステートメントをページの上部に配置すると、インポートエラーが発生することです。これは、(この例のように)HomePageがCalendarPageをインポートし、その逆も同様であるためです。

ファイルhomePageLib.py

ファイルcalendarLib.py

これにより、次のエラーが発生します。

(Python出力をより適切にフォーマットする方法に関するヒント?)

このスタイルを永続させるのではなく、もっと良い方法を見つけたいと思います。このような循環依存関係を処理し、インポートステートメントをファイルの先頭に保持するPythonの方法はありますか?

0 投票する
2 に答える
2573 参照

java - WebDriverのPageObjectsパターンで継承を処理するには?

Page Objects パターンに関する継承に対処する方法を提案してください。

たとえば、ページ オブジェクトはプロパティとメソッドを共有する必要があります。

これでOKです。しかし、問題は、UnitTests が SuperPage を拡張せず、テストのグローバル プロパティなどを保持する TestCase を拡張することです。

TestCase と SuperPage で同じものを共有する必要があるため、重複を避けるようにしています... Pages と Tests は、これらのうちの 1 つだけを拡張できます。

たとえば、利用可能な PageObjects と Tests で同じフォーム データが必要です...

例:

html フォームに入力するための PageObject がある場合、フォーム フィールドの名前が必要ですが、他の pageObject でも必要です。フィールド名がある SuperPage を拡張するようにします。たとえば、次の理由により、UnitTests から提供することはできません。

しかし一方で、これらを UnitTest メソッドで使用する必要があります。これは、それらとは異なる値を PageObjects に提供するためです。

それ以外の場合は、常に次のようにして、PageObjects に TestCase からの変数を事前設定します。

0 投票する
2 に答える
3792 参照

java - PageObjects パターンで WebDriver / Selenium 2 LoadComponents を使用するには?

WebDriver PageObject パターンに慣れるのに苦労しています。PageObjects パターンと loadableComponents の使用経験と方法を共有してください。

通常、PageObject はコンポーネントまたは機能の一部を表すため、最初はこれを使用して load() で実際に何かを実行し、isLoaded() で本来の動作を行うかどうかを確認する必要があると思いました。

次に、Web サイト内を移動する場合と同様に、各オブジェクトに独自の URL があるため、オブジェクトの「読み込み」(おそらく初期化) にのみ使用する必要があることに気付きました。isLoaded() を使用して、オブジェクトがテストの準備ができているかどうかをテストします。

しかし、テストする複雑な JavaScript 注文サブミッターがある場合、それは JS ファイル アップローダー、2 つの独立した部分に基づく JS フォーム、および 3 種類の注文がある複合体であり、(URL に関して) どこにも移動せず、ただ要素の状態が変化しています。

get() メソッドを考えてみましょう。インタラクティブなフォームでページに入ります。フォームがページに存在するときに読み込まれます。次に、form1 および form2 オブジェクトがあります...それらの load() および isLoaded() メソッドはどのように見えるべきでしょうか。これらはロードを必要とせず、サービスをテストするだけなので、すぐにアクションの準備ができています。

オブジェクトがロードされたかどうか、またはオブジェクトがロードされて正しくセットアップされたかどうかをチェックするために isLoaded() メソッドが使用されているかどうかはわかりません。しかし、前者の方法が正しいと思います。その設定の妥当性はテスト内で保証されるべきです。

シナリオ:

ドキュメントには次のように書かれています:

  • LoadableComponent
  • ページオブジェクト

    1. public メソッドは、ページが提供するサービスを表します

      検証、アップロード、アップロード 複数、キャンセル、クリア

    2. ページの内部を公開しないようにしてください

      私に起こる唯一のことは、UnitTestsにDriverインスタンスを非表示にし、PageObjectsのみを使用してすべてのフィールド名を保持し、PageObjectsのcssクラス名+ PageObjectsに入力データを提供し、サービス/機能のブール結果をアサートすることです

    3. メソッドは他の PageObject を返します

      これは慣れるのが最も難しいことです。1 つのインタラクティブ フォームに 4 つのページ オブジェクトがあるのは、ちょっと不自然です。彼らは Form1、Form2(Form1)、Upload(Form2)、Submit(Upload) を推奨していますが、前のオブジェクトへの参照の連鎖と引き渡しは非常に混沌としていると思います。テストメソッドでそれらすべてに対して get() を呼び出す方が良いようです。しかし、その背後にある考え方は、Driver インスタンスをテストに公開することではなく、Driver インスタンスを内部で使用している PageObjects のみを使用することだと思います。

    4. 同じアクションに対する異なる結果は、異なるメソッドとしてモデル化され ます。これは、Page オブジェクト側でそのアクションの有効性について決定するのではなく、テスト側で決定する必要があることを意味すると思います。

0 投票する
2 に答える
1680 参照

specflow - Page Objects パターンの使用時に Specflow のステップを再利用する

ページ オブジェクトで Specflow を使用していますが、非常によく似たシナリオがたくさんあります。例えば:

「クリックすると...」ステップを1ステップバインドする方法を確認するのに苦労しています。ページ オブジェクトのパターンに従う場合、「それなら...」ステップでナビゲートした特定のページ オブジェクトを常に返す必要があります。

現在のページ オブジェクトを格納するプロパティを含む基本ステップ定義クラスがあります。

シナリオごとに 1 つのステップ定義を記述したくはありません。これは、1 つのメソッドにまとめたい多くのコードを再利用するためです。では、どうすればステップ定義を再利用し、引き続きページ オブジェクト パターンを使用できるでしょうか?

ありがとう。

0 投票する
3 に答える
2604 参照

java - Selenium ページ オブジェクト モデル テストでのログイン機能の再利用

ユーザーがアプリケーションを使用する前に認証が必要な Web アプリケーションでの Selenium 2 の使用を検討しています。JUnit 4またはTestNGのいずれかを計画しています(Grid 2でどちらを使用するかはまだ調査中です)。jbehave も使用する予定です。

すべてのテストで正常なログイン機能を使用できるように、次のテストを改善する方法について何か提案はありますか? テスト自体でログインが重複しないようにしたい。

テストは単純化されていますが、ログイン成功のページ オブジェクトが返されます。

ありがとう

0 投票する
6 に答える
18987 参照

java - Selenium でのページ オブジェクト モデルのベスト プラクティス

ページ オブジェクトをモデル化する場合、フォームと約 50 個の入力フィールドを持つページをどのように処理しますか? ここでのベストプラクティスは何ですか?

ページ オブジェクトを作成し、入力アクションごとに個別の関数を記述しますか? または、パラメーターが渡されてテキストを入力する関数を1つ記述しますか?

例えば

また

最初のモデルでは、テストを記述するときにテストがより記述的であることがわかりますが、ページに入力フィールドが多すぎると、ページ オブジェクトの作成が面倒になります。

この投稿は、Page Objects Functional Automated Testing Best Practices with Selenium WebDriver での Selenium テストの構造化にも非常に興味深いものです。

0 投票する
3 に答える
36876 参照

c# - SeleniumPageObjectデザインパターンを使用するための最良の方法は何ですか

C#.NetでSelenium2Webドライバーを使用してテストを作成しています。Seleniumのドキュメントをたくさん読んだ後でも、PageObjectデザインパターンを使用してテストを行う方法がわからないままです。

セレンの例の多くはJavaでのみ表示され、.NetのAPIバインディングは、制限や特定の言語によって設定された標準が原因であると思われるほど類似しているとは限りません。

.Net Selenium Web DriverのPageFactoryでPageObjectデザインパターンを使用する最良の方法は何ですか?

最終的には、PageObject IWebElementsを使用したNUnitテストではなく、PageObjectsでより多くの機能を処理できるようにします。

以下は、私が現在どのようにテストを作成するかの一例です。

現時点では、これは私が現在NUnitで行っていることです。

セレンウェブドライバーのデザインパターンについて私が見つけた記事やブログ投稿のほとんどは、私が見つけた以前の投稿と矛盾しています。

それで、正しい方法は何ですか?

これに加えて、PageObjectデザインパターンも試してみました。

LoginPage内

そしてもちろん、私のホームページがそのコンストラクターでどのように開始されるべきかを示すために:

テストでWebDriverPageObjectデザインパターンを効果的に使用するにはどうすればよいですか。私はこれを理解することはできません。

0 投票する
3 に答える
4900 参照

java - 継承を使用してページオブジェクトパターンでSelenium2テストを設計する方法

現在、 Selenium 2(Webdriver)とTestNGを使用して新しいテストスイートを作成しています。私たちのテストではページオブジェクトパターンを使用しており、これまでの状況に非常に満足しています。ただし、テストで設計上の問題が発生し、そのための適切な解決策を見つけることができないようです。例を挙げましょう。LoginTestCaseは次のとおりです。

このテストからユーザーがログインする必要があるテストを拡張したいと思います。理想的には、次のようなものを書くことができます。

この時点で、ユーザーはにいます。DashboardPage必要なのは、で作成されたそのページのオブジェクトだけですLoginTestCase

明らかな解決策は、そのオブジェクトを(の)変数に格納することです。この変数はLoginTestCase、子テストケースからアクセスされます。ただし、これは非常に見苦しく、その変数の誤用につながる可能性があります。

この設計の問題に対処するこのパターンまたはいくつかのパターンに対するより良い解決策はありますか?

0 投票する
3 に答える
9758 参照

python - Webdriver は Python の pagefactory をサポートしていますか?

Webdriver プロジェクト サイトでページ オブジェクトとデザイン パターンについて読んでいて、 pagefactoryに出会いました。Webdriver for Python API に pagefactory が含まれているようには見えません。これは本当ですか?

0 投票する
2 に答える
2260 参照

ruby - Ruby を使用した PageObject - テキスト フィールドにテキストを設定すると、メイン ファイルでのみ機能します

ラジオ ボタンで選択されたオプションのリストを含むページを持つサイトを自動化しています。ラジオの 1 つを選択すると、テキスト フィールドと選択リストが表示されます。

テスト (ruby test_contracting.rb) を実行するファイル (test_contracting.rb) と、ページを表す他のクラスを作成しました。

私のクラス ContractPage には、次の要素宣言があります。

ContractPage で、ドメインの構成を次のように設定するメソッドを作成しました。

test_contracting.rb から configure_domain メソッドを呼び出すと、ラジオ ボタンが選択されますが、フィールドに値が入力されません。パラメータはメソッドに正しく取り込まれています。「puts」を使用して確認しました。パラメータを「bla」のような一般的な文字列に変更しても機能しません。厄介な点は、test_contracting.rb でまったく同じコンポーネントを呼び出すと、機能することです。

私がうまくいったのは、configure_domain メソッドで以下を実装することでした。

その後、うまくいきました。

私が参照として使用している PageObjects モジュールのドキュメントは、 http ://rubydoc.info/github/cheezy/page-object/master/PageObject/Accessors#select_list-instance_method にあります。

オブジェクトの値を設定するためにページオブジェクトによって自動生成されたメソッドがこのスコープ/コンテキストで機能しなかった理由について説明がありますか?

ちなみに、友人が Java で同じことを試みましたが、同様に失敗しました。