ホームページ >ウェブフロントエンド >CSSチュートリアル >CSSセレクターとカスタム属性でプロジェクトをアップグレードします
この記事はもともとTestProjectによって公開されました。 SitePointを可能にしたパートナーをサポートしてくれてありがとう。
Selenium WebDriverの要素セレクターは、自動化フレームワークのコアコンポーネントの1つであり、Webアプリケーションと対話するための鍵です。自動化された要素セレクターのこのレビューでは、さまざまな戦略について説明し、その機能を調査し、長所と短所を比較検討し、最終的にはCSSセレクターのカスタムプロパティと組み合わせて最良のセレクター戦略を推奨します。
キーポイント
Selenium Element selector
最適な要素セレクター戦略を選択することは、自動化の取り組みとメンテナンスの容易さの成功にとって重要です。したがって、セレクターを選択するときは、使いやすさ、汎用性、オンラインサポート、ドキュメント、パフォーマンスを考慮する必要があります。適切なセレクター戦略を慎重に考慮すると、メンテナンスが容易な自動化により、将来的には報われます。
要素セレクターの技術的側面を考慮する必要があるように、組織の文化を考慮する必要があります。開発者とQAの間のコラボレーションの成熟した文化は、自動化に要素セレクターを実装する際に、より高いレベルの成功を達成します。これは、ソフトウェア開発ライフサイクルの他の分野でのコラボレーションの基礎を築くことで組織に利益をもたらすだけでなく、自動化の取り組みを超えています。
すべてのコードサンプルは、PythonおよびSelenium WebDriverコマンドを使用しますが、通常、プログラミング言語とフレームワークに適用できます。
次のナビゲーションメニューのHTMLスニペットを各セクションの例として使用します。
<code class="language-html"><div id="main-menu"> <div class="menu"><a href="https://www.php.cn/link/7878b14e9d762184301b06f3f609ead7">Home</a></div> <div class="menu"> <a href="https://www.php.cn/link/f775ec264c01adf8189da19ec86676fe">Shop</a> <div class="submenu"> <a href="https://www.php.cn/link/f775ec264c01adf8189da19ec86676fe/gizmo">Gizmo</a> <a href="https://www.php.cn/link/f775ec264c01adf8189da19ec86676fe/widget">Widget</a> <a href="https://www.php.cn/link/f775ec264c01adf8189da19ec86676fe/sprocket">Sprocket</a> </div> </div> </div></code>
お勧めしない:タグ名、リンクテキスト、部分的なリンクテキスト、名前私はこれにあまり時間を費やしません。なぜなら、それらはすべて使用が非常に限られているからです。多くの場合、自動化フレームワーク全体で広く採用されるための良い選択ではありません。他の要素セレクター戦略を使用して簡単に対処できる特定のニーズに対応します。特別な状況に対処するための具体的なニーズがある場合にのみ、これらを使用してください。それでも、ほとんどの特別なケースは、これらを使用するほど特別なものではありません。カスタムタグやIDなど、利用可能な追加のセレクターオプションなしでこれらを使用します。
タグ名を使用して、提供するタグ名と一致する多数の要素をすべて選択できます。同じタイプの多数の要素を選択する必要がある場合にのみ機能するため、これは限られた使用です。次の例では、サンプルHTMLの4つのdiv要素すべてを返します。
<code class="language-html"><div id="main-menu"> <div class="menu"><a href="https://www.php.cn/link/7878b14e9d762184301b06f3f609ead7">Home</a></div> <div class="menu"> <a href="https://www.php.cn/link/f775ec264c01adf8189da19ec86676fe">Shop</a> <div class="submenu"> <a href="https://www.php.cn/link/f775ec264c01adf8189da19ec86676fe/gizmo">Gizmo</a> <a href="https://www.php.cn/link/f775ec264c01adf8189da19ec86676fe/widget">Widget</a> <a href="https://www.php.cn/link/f775ec264c01adf8189da19ec86676fe/sprocket">Sprocket</a> </div> </div> </div></code>
次の例を使用して、リンクを選択できます。ご覧のとおり、アンカータグとこれらのアンカータグのテキストのみを見つけることができます。
<code class="language-python">driver.find_elements(By.TAG_NAME, "div")</code>最後に、名前属性ごとに要素を選択できますが、サンプルHTMLに表示されるように、名前属性のタグはありません。これは、ほとんどすべてのアプリケーションで一般的な問題です。これは、すべてのHTML属性に名前属性を追加することが非常に一般的であるためです。メインメニュー要素に次のような名前属性がある場合:
<code class="language-python">driver.find_elements(By.LINK_TEXT, "Home") driver.find_elements(By.PARTIAL_LINK_TEXT, "Sprock")</code>次のように選択できます:
<code class="language-html"><div id="main-menu" name="menu"></div></code>ご覧のとおり、これらの要素セレクター戦略により使用が制限されています。次の方法はすべて、より一般的で強力であるため、すべて優れています。
概要:タグ名、リンクテキスト、部分リンクテキスト、名前
Pros 短所 使いやすく、広く使用されていません 場合によっては非常に限られた使用が適用されない場合があります
推奨:xpath
XPathは、用途が広く強力な要素セレクター戦略です。これは私の個人的な好みであり、お気に入りです。 Xpathは、クラスやIDが利用可能であるかどうかにかかわらず、ページ内の任意の要素を選択できます(ただし、クラスやIDがない場合、維持することは困難であり、脆弱です)。このオプションは、親要素を選択できるため、特に一般的です。 XPathには、要素の選択をカスタマイズできる多くの組み込み関数もあります。しかし、汎用性は複雑さをもたらします。 XPathが多くのことをすることができることを考えると、その学習曲線は他の要素セレクター戦略よりも急です。これは、簡単に見つかる優れたオンラインドキュメントによって補償できます。優れたリソースは、w3schools.comで見つかったxpathチュートリアルです。
また、xPathを使用するときにトレードオフがあることにも注意する必要があります。親要素を選択し、非常に一般的な組み込み関数を使用することはできますが、XPathはインターネットエクスプローラーでパフォーマンスが低下します。このトレードオフは、要素セレクター戦略を選択するときに考慮する必要があります。親要素を選択できる必要がある場合は、インターネットエクスプローラーのクロスブラウザーテストへの影響を考慮する必要があります。基本的に、インターネットエクスプローラーで自動テストを実行するのに時間がかかります。アプリケーションがインターネットエクスプローラーの使用量が高い場合、これは他のブラウザよりもインターネットエクスプローラーでテストを実行することを少なくすることを検討する可能性があるため、これは良い選択です。ユーザーベースに大きなインターネットエクスプローラーの使用がある場合、他のより良い方法が組織に適していない場合にのみXPathを考慮する必要があります。
例:
この要素セレクターは、「メニュー」に等しいIDを持つアンカーラベルの最初のインスタンスを見つけ、「/../」で親要素を見つけます。その結果、メインメニュー要素を見つけます。
<code class="language-html"><div id="main-menu"> <div class="menu"><a href="https://www.php.cn/link/7878b14e9d762184301b06f3f609ead7">Home</a></div> <div class="menu"> <a href="https://www.php.cn/link/f775ec264c01adf8189da19ec86676fe">Shop</a> <div class="submenu"> <a href="https://www.php.cn/link/f775ec264c01adf8189da19ec86676fe/gizmo">Gizmo</a> <a href="https://www.php.cn/link/f775ec264c01adf8189da19ec86676fe/widget">Widget</a> <a href="https://www.php.cn/link/f775ec264c01adf8189da19ec86676fe/sprocket">Sprocket</a> </div> </div> </div></code>概要:xpath
短所 IEで親要素を選択できます 普遍的な学習曲線はわずかに急です たくさんのオンラインサポート 推奨:IDおよびクラス
IDおよびクラス要素セレクターは、自動化における2つの異なるオプションであり、アプリケーションで異なる機能を実行します。ただし、自動化で使用する要素セレクター戦略を検討するには、それらはほとんど異なるため、個別に考慮する必要はありません。アプリケーションでは、要素の「ID」および「クラス」プロパティ(定義されている場合)により、UI開発者はアプリケーションを操作してスタイルできます。自動化のために、それを使用して特定の要素を見つけて自動化で対話します。
IDおよびクラスの要素セレクターを使用する利点の1つは、アプリケーション構造の変化によって最も影響を受けないことです。少数の要素といくつかの子要素のチェーンに依存するXPATHまたはCSSセレクターを作成すると仮定しますが、機能要求が新しい要素を追加してチェーンを破壊するとどうなりますか? IDおよびクラスの要素セレクターを使用する場合、ページ構造に依存する代わりに特定の要素を見つけることができます。変化についてあまりにもゆるくすることなく、自動化の堅牢性を保持します。特定の要素の位置に焦点を当てたテストケースを作成することにより、自動化によって変更を検出する必要があります。変更は、自動化スイート全体を壊すべきではありません。ただし、開発者が自動化で使用されるIDまたはクラスを直接変更すると、テストに影響します。テスト中のアプリケーションが開発ベストプラクティスの一部としてIDとクラスを実装していない場合、この要素セレクターポリシーは利用できません。この方法は、HTMLタグに自動化で使用できるIDとクラスがない場合に使用が困難です。
例:
私たちの例では、トップメニュー要素を選択したい場合は、次のようになります。
<code class="language-html"><div id="main-menu"> <div class="menu"><a href="https://www.php.cn/link/7878b14e9d762184301b06f3f609ead7">Home</a></div> <div class="menu"> <a href="https://www.php.cn/link/f775ec264c01adf8189da19ec86676fe">Shop</a> <div class="submenu"> <a href="https://www.php.cn/link/f775ec264c01adf8189da19ec86676fe/gizmo">Gizmo</a> <a href="https://www.php.cn/link/f775ec264c01adf8189da19ec86676fe/widget">Widget</a> <a href="https://www.php.cn/link/f775ec264c01adf8189da19ec86676fe/sprocket">Sprocket</a> </div> </div> </div></code>
Pros 短所 開発者を維持しやすくすると、自動化を破ることができます ページ構造の変更の影響を最小限に抑えることが簡単です
Best:CSSセレクターのカスタムプロパティ
と組み合わせてQA組織が開発チームと良好な共同関係を持っている場合、このベストプラクティスアプローチを自動化で使用できる可能性が高いでしょう。カスタムプロパティとCSSセレクターを使用して要素を見つけることは、QAチームと組織にとって複数の利点があります。 QAチームの場合、これにより、自動化エンジニアは、複雑な要素セレクターを作成せずに必要な特定の要素を見つけることができます。ただし、これには、自動化チームがアプリケーションで使用できるカスタムプロパティを追加する機能が必要です。このベストプラクティスアプローチを活用するために、開発とQAチームはこの戦略を実装するために協力する必要があります。
CSSセレクターメソッドはカスタムプロパティに依存していないことを指摘したいと思います。 CSSセレクターは、XPathのようなHTMLドキュメントで任意のタグとプロパティを見つけることができます。
この方法に何が含まれているか見てみましょう。これを最大限に活用するには、自動化チームが自動化でターゲットにしたいものを理解する必要があります。開発者(おそらくフロントエンドエンジニア)と協力して、自動化チームが接続する必要があるすべてのターゲットに配置されるカスタム属性パターンを開発します。この例では、ターゲット要素に「TID」属性を追加します。
ここで強調すべき技術的なポイントは、CSSセレクターの制限です。彼らは意図的にXpathのように親要素を選択することを許可しません。これは、WebページのCSSスタイルの無限ループを回避するために行われます。これはWebデザインにとって良いことですが、自動化された要素セレクター戦略として使用するための制限です。幸いなことに、この制限は、開発者によって実装されたカスタムプロパティでは回避できます。 QAは、親要素を選択する必要がないように、適切なカスタム属性を要求する必要があります。
カスタムプロパティを使用せずにこのポリシーを選択する場合は、まだ正しい軌道に乗っています。たとえば、次の方法を使用して、ショップサブメニューのリンクを見つけることができます。
<code class="language-python">driver.find_elements(By.TAG_NAME, "div")</code>この戦略により、自動化エンジニアは、UIの無関係な変更のためにメンテナンスが容易で壊れない信頼できる自動化を作成できます。この戦略を選択することは、それを行うための最良の方法です。メンテナンスが容易な自動化ソリューションになるだけでなく、開発チームとQAチームとのコラボレーションも促進します。
例:
いくつかの要素の新しいプロパティに注意してください。 「TID」と呼ばれる標準のHTML属性と競合しない新しいプロパティを作成しました。このカスタムプロパティを使用すると、CSSセレクターを使用して配置できます。
<code class="language-python">driver.find_elements(By.LINK_TEXT, "Home") driver.find_elements(By.PARTIAL_LINK_TEXT, "Sprock")</code>
メニュー内のすべてのリンクを選択して、トップメニュー項目であろうとサブメニューであろうと仮定します。 CSSセレクターを使用すると、非常に一般的な要素セレクターを作成できます。
<code class="language-html"><div id="main-menu"> <div class="menu"><a href="https://www.php.cn/link/7878b14e9d762184301b06f3f609ead7">Home</a></div> <div class="menu"> <a href="https://www.php.cn/link/f775ec264c01adf8189da19ec86676fe">Shop</a> <div class="submenu"> <a href="https://www.php.cn/link/f775ec264c01adf8189da19ec86676fe/gizmo">Gizmo</a> <a href="https://www.php.cn/link/f775ec264c01adf8189da19ec86676fe/widget">Widget</a> <a href="https://www.php.cn/link/f775ec264c01adf8189da19ec86676fe/sprocket">Sprocket</a> </div> </div> </div></code>
「*=」の目的は、任意の要素のTIDフィールドで値「-link」をワイルドカード検索を実行することです。メインメニュー内の要素の検索スコープをフォーカスする#メインメニューID仕様の後に置きます。
カスタムプロパティを使用せずにこのポリシーを選択する場合は、まだ正しい軌道に乗っています。たとえば、次の方法を使用して、ショップサブメニューのリンクを見つけることができます。
この戦略により、自動化エンジニアは、UIの無関係な変更によって中断されない、メンテナンスが容易であり、信頼できる自動化を作成できるようになります。この戦略を選択することは、それを行うための最良の方法です。メンテナンスが容易な自動化ソリューションになるだけでなく、開発チームとQAチームとのコラボレーションも促進します。<code class="language-python">driver.find_elements(By.TAG_NAME, "div")</code>
要約:CSSセレクターのカスタムプロパティと組み合わせて
Pros短所 開発チームとの共同関係を構築するための最初の努力を簡単に学ぶ たくさんのオンラインサポートユニバーサル すべてのブラウザで優れたパフォーマンス
結論自動化フレームワークにエンタープライズ標準要素セレクター戦略を実装するための適切なオプションがいくつかあります。タグ名やリンクテキストなどのオプションは、唯一のオプションでない限り避ける必要があります。 Xpath、ID、およびクラスセレクターは良い方法です。最善の方法は、カスタムプロパティを実装し、CSSセレクターを使用してそれらを見つけることです。これにより、開発チームとQAチームとのコラボレーションも促進されます。
以下は、並んで比較するためのオプションです:
✓–はい / - パート✗ - いいえ
CSSセレクターのカスタムプロパティに関するFAQ
CSSセレクターのカスタムプロパティとは何ですか?
CSSセレクターを使用してプロパティをカスタマイズする方法は?
を使用します。その後、これらの要素に任意のスタイルを適用できます。 []
[data-active]
プロパティを備えたCSSセレクターカスタムプロパティを使用できますか?
CSSプロパティセレクターのさまざまなタイプは何ですか?
すべてのブラウザーにCSSセレクターカスタムプロパティを使用できますか?
CSSセレクターカスタムプロパティを使用してサイトのパフォーマンスを向上させる方法は?
他のセレクターと組み合わせてCSSセレクターカスタムプロパティを使用できますか?
CSSセレクターカスタム属性は、通常、状態または関数に基づいて要素をスタイリングするために使用されます。たとえば、カスタムプロパティセレクターを使用して、すべての無効ボタンまたは必要なフォームフィールドをスタイリングできます。また、データテレモ属性に従って異なるスタイルを適用することにより、テーマ設定にも使用できます。
CSSセレクターカスタムプロパティは、他の多くのCSSセレクターよりも柔軟性が高くなります。他のセレクターは、タグ名、クラス、またはIDに基づいて要素を選択することに限定されていますが、カスタム属性セレクターは任意の属性に基づいて要素を選択できます。これにより、複雑なWebページを設定するための強力なツールになります。
CSSセレクターを使用したカスタマイズプロパティの潜在的な欠点の1つは、CSSをより複雑にすることができることです。多数のカスタムプロパティセレクターを使用する場合、CSSを理解して維持することは困難かもしれません。ただし、これは慎重な計画と組織によって軽減できます。
以上がCSSセレクターとカスタム属性でプロジェクトをアップグレードしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。