概要
バージョンアップに伴う変更点をまとめてます。
経緯
Selenium3を2023年7月まで使用していたため学習と情報共有もかねての記事です。
環境
Python 3.9
Selenium 4.11.2
前回の掲載した記事の仕様です。環境を真似したい方はこちら
アップデート方法
Python
Python を使用するための最も重要な変更は、最低限必要なバージョンです。Selenium 4 には、少なくとも Python 3.7 以降が必要です。詳細については、Python Package Indexを参照してください。コマンドラインからアップグレードするには、次を実行できます。
pip install selenium==4.4.3
pip upgrade selenium
新機能の紹介
Selenium4系での記述の違いは以下になります。
elementの後に( )で囲う範囲が少なくなり、宣言自体が長くなっています。
driver.find_element_by_name("name").send_keys("hoge")
driver.find_element(By.NAME,"name").send_keys("hoge")
driver options
また、ドライバー動作設定が異なりますので比較していきましょう。
caps = {}
caps['browserName'] = 'firefox'
caps['platform'] = 'Windows 10'
caps['version'] = '92'
caps['build'] = my_test_build
caps['name'] = my_test_name
driver = webdriver.Remote(cloud_url, desired_capabilities=caps)
from selenium.webdriver.firefox.options import Options as FirefoxOptions
options = FirefoxOptions()
options.browser_version = '92'
options.platform_name = 'Windows 10'
cloud_options = {}
cloud_options['build'] = my_test_build
cloud_options['name'] = my_test_name
options.set_capability('cloud:options', cloud_options)
driver = webdriver.Remote(cloud_url, options=options)
要素検索方法
単一要素検索
driver.findElementByClassName("className");
driver.findElementByCssSelector(".className");
driver.findElementById("elementId");
driver.findElementByLinkText("linkText");
driver.findElementByName("elementName");
driver.findElementByPartialLinkText("partialText");
driver.findElementByTagName("elementTagName");
driver.findElementByXPath("xPath");
driver.findElement(By.className("className"));
driver.findElement(By.cssSelector(".className"));
driver.findElement(By.id("elementId"));
driver.findElement(By.linkText("linkText"));
driver.findElement(By.name("elementName"));
driver.findElement(By.partialLinkText("partialText"));
driver.findElement(By.tagName("elementTagName"));
driver.findElement(By.xpath("xPath"));
エレメントの宣言が、()の中に移動し、詳細設定を行うことができます。
複数検索
driver.findElementsByClassName("className");
driver.findElementsByCssSelector(".className");
driver.findElementsById("elementId");
driver.findElementsByLinkText("linkText");
driver.findElementsByName("elementName");
driver.findElementsByPartialLinkText("partialText");
driver.findElementsByTagName("elementTagName");
driver.findElementsByXPath("xPath");
driver.findElements(By.className("className"));
driver.findElements(By.cssSelector(".className"));
driver.findElements(By.id("elementId"));
driver.findElements(By.linkText("linkText"));
driver.findElements(By.name("elementName"));
driver.findElements(By.partialLinkText("partialText"));
driver.findElements(By.tagName("elementTagName"));
driver.findElements(By.xpath("xPath"));
単一と同じく、複数でもエレメントの宣言が、()の中に移動し、詳細設定を行うことができます。
今回は行いませんが、変数に入れて宣言もありですね。
実際のコードの比較とエラー対策
executable_path has been deprecated, please pass in a Service object
'executable_path has been deprecated, please pass in a Service object'
executable_pathSelenium 4 では、非推奨の警告が表示されないように、Service オブジェクトからドライバーを設定する必要があります。(または、パスを設定せず、必要なドライバーがシステム パス上にあることを確認してください。)
from selenium import webdriver
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(
executable_path=CHROMEDRIVER_PATH,
options=options
)
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
options = webdriver.ChromeOptions()
service = ChromeService(executable_path=CHROMEDRIVER_PATH)
driver = webdriver.Chrome(service=service, options=options)
まとめ
Selenium 4 にアップグレードする際に考慮すべき主な変更点を検討しました。新しいバージョンの使用時に発生する可能性のある潜在的な問題を防ぐ方法に関する提案を含め、アップグレード用にテスト コードを準備するときにカバーするさまざまな側面について説明しました。セレン。最後に、アップグレード後に発生する可能性のある一連の問題についても取り上げ、それらの問題に対する潜在的な修正方法を共有しました。
sankobunken