問題タブ [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 投票する
2 に答える
1247 参照

watir - チェックボックスで廃止されたページオブジェクトを回避する方法

私は1年前からキュウリを使用しており、数週間からpage-object-gemを追加しています。テストを実行すると、次のメッセージが表示されます。

非推奨の警告
commentPage.rb:23:in `block indelete_comment'でcheckboxという名前のメソッドを呼び出しています。
このメソッドはページオブジェクトに存在しないため、ドライバーに渡されます。
この機能は近い将来削除される予定です。
正しいページオブジェクトメソッドを呼び出すようにコードを変更してください。

(他の場合も同じですが、この「些細な」例の方が説明しやすいはずです)

私はそれを回避する方法を探していますが、それは複雑なようです。

テストのために、私はテーブルがあるページをチェックしています。各行には行が表示されます。特定の行のチェックボックスをオンにする必要があります。

pageObjectの私のコード:

テスト中にテーブルを使用するには、テーブルの前処理が必要でしたか?

0 投票する
1 に答える
1095 参照

webdriver - 一般的に適用できる方法でJavaでWebdriver / PageObjects / Pagefactoryを実装するにはどうすればよいですか

これは、Webdriver に適用される PageObjects/Pagefactory の実装の理解を試みたものです。

これらのシナリオ クラスは PageObjects をインスタンス化し、それらのメソッドを呼び出しますが、ブラウザのセットアップはテスト実行ごとに 1 回だけ呼び出されます。

問題は次のとおりです。

  1. 以下のようなメソッドを宣言して Pagefactory を呼び出す必要がありますか?

public MyPage method() { Login() などのメソッドを呼び出します return PageFactory.initElements(driver, MDNSLoginPage.class); }

  1. または、デフォルトのコンストラクターから同じ PageFactory を呼び出す必要があります

  2. 私の理解/実装は正しいですか?

0 投票する
1 に答える
1706 参照

c# - Selenium PageObjects パターンとコンポーネント

ページのコンポーネントに PageObjects パターンを適用するときの標準的なアプローチは何ですか?

例として、Amazon の製品ページの機能のテストを書いているとしましょう。

そのページには、多数の個別の機能、製品情報、これを見た顧客、他の顧客が提案したものなどが含まれています。

私が見た PageObjects の現在の例は、機能が制限された単一のページを処理する方法のみをカバーしています。私が探しているのは、製品ページを表し、各コンポーネントを表す ComponentObjects で構成される PageObject の行に沿ったものです。

例えば:

次に、テスト内で次のようにコントロールにアクセスします。

私は以前にこのアプローチを使用しましたが、子オブジェクトとそのコンポーネントの解決を可能にする Selenium の上に構築されたカスタム フレームワークを使用しました。私が探しているのは、Selenium 2 と C# をそのまま使用するアプローチです。

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

ruby - キュウリのステップで、別のステップのページ オブジェクトによって設定された変数を確認する

Cheezy の PageObject を使用して、いくつかのキュウリ テストをセットアップしています。Jeff Morgan の本 "Cucumber & Cheese" のように、ほとんどすべてをセットアップしています。

現在、変数@tagを設定するメソッドを持つページオブジェクト「PublishPage」セットアップがあります。たとえば、私はファイル publish_page.rb に持っています

Cucumber のステップでは、ステップの 1 つに がありon_page(PublishPage).tag、別のステップに がありon_page(PublishPage).verify_tagます。私のenv.rbファイルにはrequire 'rspec-expectations'.

問題は、このコードを実行すると、というエラーが表示されることundefined method 'include' for #<PublishPage:xxxxxx>です。しかし、verify_tag メソッド内のコードをステップに移動すると、@tag にアクセスできないことを除いてすべてが機能します...

0 投票する
1 に答える
203 参照

ruby - これが「nil を文字列に変換できません」を返す理由

Jeff Morgan の本「Cucumber & Cheese」とほぼ同じセットアップを使用しており、このようなページ オブジェクトがあります。

Cucumber ステップで次のコマンドを実行すると、各コマンドは独自のステップで失敗し、cannot convert nil to string. インスタンス変数 @tag に関係していることはわかっていますが、その理由はわかりません。

0 投票する
1 に答える
91 参照

ruby - 抽象化レイヤーでのTest::Unitの使用

オブジェクトの内部からアサーションを呼び出す方法はありますか?私はSeleniumテストを作成し、アサーションと簡単なレポートのためにテストユニットを使用しています。トップレベルのテスト(Test :: Unit :: TestCaseを拡張するクラス)とセレンWebドライバーの間に抽象化レイヤーがあります。私は抽象化レイヤーにページ上のすべてのアイテムを担当させており、抽象化レイヤーが予期していたもの以外のものを見つけた場合にトップレベルのテストを停止する方法が必要です。この抽象化レイヤーの内側からTest::Unitアサーションを呼び出すことができれば、それは理想的です。これをよりよく達成する方法について何か提案があれば、私は提案を受け入れます。ありがとう、ザック

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

ruby - レスキュー ブロックが機能しないのはなぜですか?

Selenium webdriver を使用しており、テストの失敗を報告する前に、ページ オブジェクトにページを複数回表示させようとしています。私の問題は、開始レスキュー ブロックでキャッチされていないエラーが発生していることです。
ここにエラーがあります

Selenium::WebDriver::Error::NoSuchElementError: 要素が見つかりません: {"method":"id","selector":"does not exist"}

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

java - さまざまなPageObjectを返すことができるWebDriverPageObjectメソッドを実装する方法

WebDriverの使用を開始したばかりで、特にPageObjectsPageFactoryを使用してベストプラクティスを学習しようとしています。

PageObjectsはWebページのさまざまな操作を公開し、WebDriverコードをテストクラスから分離する必要があることを理解しています。多くの場合、同じ操作を行うと、使用するデータに応じて異なるページに移動する可能性があります。

たとえば、この架空のログインシナリオでは、管理者の資格情報を提供するとAdminWelcomeページに移動し、顧客の資格情報を提供するとCustomerWelcomeページに移動します。

したがって、これを実装する最も簡単な方法は、異なるPageObjectsを返す2つのメソッドを公開することです。

ログインPageObject

そして、テストクラスで次のことを行います。

また

代替アプローチ

コードを複製する代わりにlogin()、関連するPageObjectを返す単一のメソッドを公開するよりクリーンな方法があることを望んでいました。

ページの階層を作成して(またはインターフェイスを実装して)、それを戻り型として使用できるようにすることを考えましたが、不器用に感じます。私が思いついたのは次のとおりです。

つまり、テストクラスで次のことができます。

また

これは柔軟性があります-ExpiredPasswordページを追加でき、login()メソッドをまったく変更する必要はありません-別のテストを追加して、適切な期限切れのクレデンシャルとExpiredPasswordページを期待されるページとして渡すだけです。

もちろん、loginAsAdmin()loginAsCustomer()メソッドを非常に簡単に残して、それらの内容をジェネリックへの呼び出しに置き換えることができますlogin()(その後、プライベートになります)。新しいページ(たとえば、ExpiredPasswordページ)には、別のメソッド(たとえばloginWithExpiredPassword())が必要になります。

これには、メソッド名が実際に何かを意味するという利点があり(ログインの結果が3つあることが簡単にわかります)、PageObjectのAPIは少し使いやすくなっています(「期待されるページ」が渡されない)が、WebDriverコードはまだ再利用されています。

さらなる改善...

単一のlogin()メソッドを公開した場合は、それらのページにマーカーインターフェイスを追加することで、ログインからどのページに到達できるかをより明確にすることができます(各シナリオのメソッドを公開する場合、これはおそらく必要ありません)。

そして、ログイン方法を次のように更新します。

どちらのアプローチもうまくいくようですが、より複雑なシナリオでどのように拡張できるかはわかりません。このようなコード例は見たことがないので、ページ上のアクションがデータに応じて異なる結果をもたらす可能性がある場合、他のすべての人が何をするのだろうかと思います。

または、WebDriverコードを複製し、データ/ PageObjectsの順列ごとに多くの異なるメソッドを公開するのが一般的な方法ですか?

0 投票する
1 に答える
186 参照

python - デザインパターン/ OOP : 操作をクラスに分割する方法

自動化のためにPython Page Objectで作業しています。basePageObject(ChangePasswordPage) があり、ページのフィールドによって異なる 4 つの子ページがあります。これらすべてのパスワード変更ページは同じ URL で実行されますが、フィールドが異なり、ユース ケースによって異なります。たとえば、あるものには古いパスワード フィールドがあり、もう 1 つにはありません。また、セキュリティの質問と回答などがあります。そのため、これらすべてのバリエーションに対してさまざまな子クラスを作成しました。

今私の問題は、指定されたパスワードのセットでパスワードを再帰的に変更しようとする操作を作成する必要があることです。その再帰操作には子クラスの「changePassword」操作が必要なため、子パスワード変更ページ内にその操作を書き込むことはできません。さらに、各子クラスに対するこの再帰操作は異なります。すべての子クラスで同じではありません。では、どのパターンがこのケースに最も適しているでしょうか。この新しい再帰操作をどこに書くか、新しいクラスを作成する方法、および OOP 原則を適用する方法を教えてください。

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

c# - webdriver PageFactory を使用して特定のページを選択する

ボタンをクリックすると別のページに移動する Web プロジェクトがあります。新しいページは、サーバー内のデータに応じて、3 つの可能なページのいずれかになります。(そのうちの 2 ページの URL は同じかもしれません)

PageObject モデルを使用して、各ページに期待される要素を表す 3 つのクラスがあります。

実際にロードされたページを実際に見つける最良の方法は何ですか? 3 つの一意の要素を待機して、実際に読み込まれた要素を取得できる OR 型の待機はありますか?