ロケーターを見つけよう - Python バインディングの変更が近日中に予定されています

Selenium 4 の Python バインディングの変更に関するロケーターの更新

不動産業界では、新しい家やオフィススペースを見つけるための秘訣は「場所、場所、場所!」です。Selenium を使用する場合、テスト作成の重要な側面は「ロケーター、ロケーター、ロケーター!」と言えるでしょう。堅牢なロケータ戦略を(テスト対象のアプリとテストフレームワークの両方に)持つことは、効果的なテストにとって非常に重要です。

もしあなたが私のように Python を愛用しており、テスト自動化に Selenium を使用している Pythonista なら、ロケーターの定義方法と使用方法に重要な変更が加えられる予定です。

Selenium 4.2 以降のある時点で、Python Selenium バインディングは要素を見つけるためのロケーター固有のメソッドを削除します。つまり、次のメソッド

driver.find_element_by_id("some_id")
driver.find_element_by_name("some_name")
driver.find_element_by_tag_name("some_tag")
driver.find_element_by_css_selector("some_selector")
driver.find_element_by_class_name("some_class")
driver.find_element_by_link_text("some_text")
driver.find_element_by_partial_link_text("some_other_text")
driver.find_element_by_xpath("some_xpath")

が削除されます。これらのメソッドはすべて、実際には次の特殊なケースです。

driver.find_element(By_object, "some_locator")

したがって、このアプローチが Python バインディングで推奨される(必須となる)ようになりました。

By オブジェクトを使用することをお勧めします。By オブジェクトには、特定のロケータ戦略を使用するための特定の値があります。たとえば、次の行

driver.find_element_by_id("submit_button").click()
driver.find_element_by_css_selectors('.myelement child').text

は次のようになります

driver.find_element(By.ID, "submit_button").click()
driver.find_element(By.CSS_SELECTOR, '.myelement child').text

ただし、どうしても必要な場合は、By オブジェクトの代わりに文字列を使用できます。

driver.find_element('id', "submit_button").click()
driver.find_element('css selector', '.myelement child').text

Python テスト用の Selenium クライアントを Selenium 4 の最新バージョンにアップグレードする予定がある場合は、これらの変更を念頭に置いてください。ロケータ戦略と構造を更新する良い機会です。

(この記事はもともとこちらに投稿されました。ここに追加してくれた Selenium コアコントリビューターに感謝します!)