パート 6: クラスによって、タプルと Marionette を使う

コードでは、これまで、特定の要素を見つけるために多くのロケータを使用しています。アプリケーション(iFrames)やアプリケーションの特定の部分であるかどうか。今まで、結果として、直接インラインロケータを書いて、コードを複製しています。さらに状況を改善するためには、再利用できるように、Pythonのタプル変数にこのロケータを抽象化することをお勧めします。この記事では、どのようにお見せしましょう。

タプル、およびクラスによるMarionette

例として、連絡先アプリiFrameを見つけるために使用しているロケータを考えてください。:

'css selector', "iframe[data-url*='contacts']"

表示されるようにフレームを待っているときと切り替えるときの両方でこのロケータを使用します。簡単に物事を行うために、変数でこれを保存することができます。(またByをインポートする必要があります。):

from marionette import By

_contacts_frame_locator = (By.CSS_SELECTOR, "iframe[data-url*='contacts']")

Marionette By クラスは、idやCSSセレクタなどのように位置決め技術へのアクセスへのショートカットを提供します。前のように、セレクタを使用して要素を取得し、次にCSSのタプル変数に格納します。HTML(とロケータ)が変化した場合、2つの場所で変更を行うよりも、一度変数を更新する方が簡単です。このタプルを使用するには、そのようなfind_element()メソッドでそれを含みます。:

self.marionette.find_element(*self._contacts_frame_locator)

注意: * — これに関連して — Pythonコードは、引数リストを開梱するためのものです; それはfind_element()に渡る必要がある2つの引数に元のタプルを分割しています。詳細および例について、PythonのドキュメントでUnpacking argument listsをご覧ください。

他のタプルの例、それは、id 属性によって探し出しますが、以下のとおりであります:

_add_contact_button_locator = (By.ID, 'add-contact-button')

連絡先のテストでタプルとByを使用

今では、テストのうち、ロケータを共有することができる TestContacts クラスのスコープにロケータを移動させることにより、test_add_contact.py のテストケースで重複を減らすための時間です。2,3のロケータを代入する方法を示し、その後、読者の演習として残りの部分を残しておきます。

まず第一に、コードの先頭に次のように置くことによって、By をインポートすることを確認する必要があります。:

from marionette import By

今、TestContactsクラスの一番上にタプルを追加することができます。ちょうどclass TestContacts(unittest.TestCase):行の下に次の行を追加します。:

_contacts_frame_locator = (By.CSS_SELECTOR, "iframe[data-url*='contacts']")
_save_button_locator = (By.ID, "save-button")

今、コードを通過し、すべてのインスタンスを置き換えることができます

find_element('id', 'save-button')

with

find_element(*self._save_button_locator)

and all instances of

find_element('css selector', "iframe[data-url*='contacts']")

with

find_element(*self._contacts_frame_locator)

そして、それは今のところこれだけです。既にあってもこの単純な例では、このコードの再利用のメリットを確認できるようになることを確信しています。この手法では、同じロケータが5、10または20回使用することを有することができる、より複雑なテストを書くために開始するように、特に有効になり始めます。

 

ドキュメントのタグと貢献者

 このページの貢献者: chrisdavidmills, hamasaki, Uemmra3, shide55
 最終更新者: chrisdavidmills,