尋找您的定位器 - Python 繫結即將變更

更新您的定位器以應對 Selenium 4 中 Python 繫結的變更

在房地產界,尋找新房屋或辦公空間的口頭禪是「地點、地點、地點!」。可以說,在使用 Selenium 時,編寫測試的關鍵方面是「定位器、定位器、定位器!」。擁有穩健的定位器策略 - 在您的受測應用程式和測試框架中 - 對於有效的測試至關重要。

如果您像我一樣是 Pythonista,並且使用 Selenium 進行測試自動化,那麼對於如何定義和使用定位器,即將發生一些重要的變更。

在 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 物件,它具有用於特定定位器策略的特定值。例如,這行程式碼

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 核心貢獻者將其添加到此處!)

上次修改時間:2022 年 8 月 9 日:還原對部落格文章的變更 (e1cc6d0df01)