PythonとPlaywrightを使用したIframeの処理

Microsoftの自動化ライブラリを使用してiframeとネストされたiframeを操作する方法を学びます。

Unsplashのパインワットによる写真

インラインフレーム(より一般的にはiframeとして知られています)は、サードパーティのコンテンツを表示したり、Webページのコンテンツ内に新しいページを埋め込んだりするために使用されます。テスト自動化の世界では、iframeの操作が難しい場合があります。

Seleniumでは、エンジニアがこのswitch_to方法を使用してドライバーのフォーカスをフレーム自体に変更する必要があります。アクションの実行が完了したら、を使用してドライバーをメインページに再度フォーカスする必要がありますswitch_to.default_content()。これは難しいワークフローではありませんが、アクションを実行する必要があるときはいつでもフレームを切り替え続けるのは確かに面倒です。

サイプレスはiframeをネイティブに処理しません。これはcy、すべてのサイプレスコマンドで使用されるプレフィックスが、が見つかるまでDOMをトラバースするため#documentです。見つかったら、トラバーサルは終了します。Cypressをiframeで使用するには、カスタムコード(またはcypress-iframeプラグイン)が必要です。

一方、劇作家は、iframeの操作をシンプルかつ直感的にします。このチュートリアルでは、従来のiframeとネストされたiframeの両方でPlaywrightを使用する方法を学習します。テストの焦点として、DemoQAフレームとネストされたフレームのページを使用します。

入門

このチュートリアルでは、次のパッケージをインストールする必要があります。

  • Pytest
  • 劇作家

セレクターメソッド

Playwrightは、エンジニアにiframeを選択するための3つのオプションを提供します。

  • element_handle.content_frame()
  • page.frame()
  • page.frames [i]

このpage.frames[i]プロパティは、iframeに一意の属性や親要素がない場合に使用する必要があります。プロパティは、特定のフレームのインデックスを作成できるページ上のすべてのアクティブなフレームを一覧表示します。アプリケーションのソースコードにアクセスできず、前の2つの方法を使用できない場合を除いて、この方法の使用はお勧めしません。

Iframeに焦点を当てる

DemoQAフレームページには2つのiframeが含まれています。1つはページの左中央に、もう1つは左下にあります。

DemopQAフレームページ。

DemoQAフレームページのiframeには一意のurl属性がなく、属性もありませんname。element_handle.content_frame()親要素に一意のセレクターがあるため、これらの場所を特定する方法を使用します。

これで、ページの最初のフレームにアクセスできます。劇作家のアサーションはElementHandlesで使用できるframe_oneとheadingPytestアサーションを書き込むために。

ネストされたフレーム

Playwrightは、frame.child_frame[i]プロパティを使用して既存のiframe内のフレームを選択するための追加の方法を提供します。このプロパティは、ページ上のiframe内のすべての子フレームのリストを返します。page.frames[i]プロパティと同様に、これは、子iframeに一意の属性nameまたはurl属性がない場合、または一意のロケーター戦略を持つ親要素がある場合に役立ちます。

デモQAネストフレームページ。

DemoQAのネストされたフレームページの子iframeには、一意のロケーター戦略がないため、frame.child_frame[i]プロパティを使用して選択する必要があります。

子iframeには、「子Iframe」というテキストを持つbody要素と単一のp要素が含まれます。これを使用して、Pytestアサーションステートメントを作成するためのPlaywrightアサーションを作成できます。

検証

上記のテストは、次のコマンドを使用してターミナルで実行できます(を使用している場合pytest-playwright)。

  • pytest ヘッドレスランの場合
  • pytest --headful 頭一杯のために

browser = {browser_type}.launch(headless=False)

このチュートリアルを完了すると、ディレクトリは次のようになります。

tests
    |__ test_frames.py
.gitignore
README.md
requirements.txt

Playwrightを使用すると、エンジニアはiframeを見つけてアクションを実行するための、きちんとした読みやすいテストコードを作成できます。オートメーションスペース内のPlaywrightの競合他社とは異なり、エンジニアは、インラインフレーム要素を操作するときに、カスタムコードを記述したり、ドライバーのフォーカスを追跡したりする必要はありません。

Jonathan Thompsonは、テスト自動化を専門とする上級品質エンジニアです。彼は現在、ノースカロライナ州ローリーに妻とウィンストンという名前のゴールデンドゥードルと一緒に住んでいます。LinkedInで彼とつながるか、Twitter(@jacks_elsewhere) またはGithub(ThompsonJonM)で彼をフォローすることができます。

提案された投稿

Langchain を使用して ChatGPT プラグインを無料で実行する方法

Langchain を使用して ChatGPT プラグインを無料で実行する方法

ブラウザ、コード インタープリターなどの新しい強力な ChatGPT プラグインについては聞いたことがあるはずです。しかし、問題があります。プラグインへのアクセスは待機リストに制限されているため、多くの人がアクセスできません。

私が最もよく使用するコーディング リソース

私が最もよく使用するコーディング リソース

今週、毎日のメールリストのメンバーからメールを受け取りました。彼らは次のことを知りたかったのです。毎日、毎週、毎月どのリソースにアクセスしていますか? 素晴らしい質問です!私のワークフローと使用している主なリソースについての洞察を共有したいと思います。

関連記事

「マリアナ海溝の公開: 深淵の恐るべき隠された真実を明らかにする」

「マリアナ海溝の公開: 深淵の恐るべき隠された真実を明らかにする」

はじめに:勇敢な読者の皆さん、地球の最も暗い深みへ私たちを導く旅へようこそ。このブログでは、マリアナ海溝の謎に満ちた世界を掘り下げ、その隠された秘密を明らかにし、その表面の下にある骨も凍るような真実を明らかにします。

ドメイン名に関する情報の検索

Brian P. Hogan 著『Small, Sharp Software Tools』からの抜粋

ドメイン名に関する情報の検索

facebook.com にリクエストを送信すると、コンピュータはドメイン名を検索してそのドメイン名を IP アドレスに変換し、コンピュータが接続できるようにします。

仕事週間で学ぶことはあなたが思っている以上に重要です

仕事週間で学ぶことはあなたが思っている以上に重要です

私たちは、自分にとって良いとわかっていることを実行するのに苦労していることによく気づきます。大切な人に愛していると伝えることから、海賊のように話すことを忘れないことまで、すでにそうしたことを行っているため、1日、1週間、または1か月のイベントは必要ないと主張する人が常にいます。

ポッドキャストが影響力を持つ理由は何ですか?

ポッドキャストが影響力を持つ理由は何ですか?

先週、私はPressGazette(英国のメディアニュースウェブサイト)経由で送信されたプレスリリースに気づきました。この記事は、スカンジナビアのポッドキャスト ホスティングおよび広告会社である Acast が、ポッドキャスティングにおいて「おそらく最も影響力のある」パブリッシャーのコンソーシアムを率いることになると発表しました。