SeleniumeBasicでドロップダウンリストをハンドルする usage_list

リファレンス

 SeleniumBasicでドロップダウンリストを扱う構文を紹介します。

  • 利用目的は業務効率化です。(テスト自動化ではありません)
  • ブラウザはGoogleChromeが対象です。(EdgeやFirefoxは対象外)
  • 原文のVBAでは現在エラー発生する場合が多いため、修正を加えてます。
Examples.xlsmの保存場所(ここをクリック)

 Examples.xlsmが保存されている場所は、SeleniumBasicがインストールされているサブフォルダ内になります。SeleniumBasicのインストール完了時に保存フォルダを確認することができます。ただ、大体以下フォルダのどちらかにファイル保存されています。

  • C:\Program Files\Seleniumbasic\Examples\Excel
  • shell:Local AppData\SeleniumBasic\Examples\Excel
目次

ドロップダウンリストから選択(シングルセレクト)

 ホームページにあるドロップダウンから一つ選択をしたい場合に、以下の様な構文を実行します。

Private Sub Handle_Dropdown_List()
    Dim Assert As New Selenium.Assert
    Dim Driver As New ChromeDriver
    Driver.Get "https://the-internet.herokuapp.com/dropdown"
    Stop
    Dim ele As SelectElement
    Set ele = Driver.FindElementById("dropdown").AsSelect
    ele.SelectByText "Option 2"
    Assert.Equals "Option 2", ele.SelectedOption.Text
    Stop
    Driver.Quit
End Sub

6行目:SelectElement型として変数宣言。これで、ドロップダウンから選択するための準備ができました。
7行目:ドロップダウンのWeb要素を取得し、AsSelectメソッドでドロップダウンから選択するメソッドを設定します。
8行目:SelectByTextメソッドでドロップダウンリストの"Option 2"をテキストで指定し、選択実行します。
9行目:Assertで選択した項目が合致しているか確認

SelectByの種類は3種類あります。

・SelectByText 選択項目のテキストでリスト指定
・SelectByIndex 上から順番でリスト指定(インデックス開始は0から)
・SelectByValue Value値の設定がある場合に指定

セレクトボックスから選択(マルチセレクト)

 ホームページにあるセレクトボックスで複数選択が可能な場合の処理構文を紹介します。今回は、セレクトボックスの全項目を選択する構文の紹介になります。

Private Sub Handle_Multi_Select()
    Dim Keys As New selenium.Keys
    Dim Driver As New ChromeDriver
    Driver.Get "https://bayashita.com/p/entry/show/24"
    Dim ele As WebElement, eles As WebElements
    Set eles = Driver.FindElementsByXPath("//*[contains(@id,'list1')]/*[contains(@option,'')]")
    For Each ele In eles
        ele.Click Keys.Control
    Next ele
    Stop
    Driver.Quit
End Sub

5行目:FindElementsByXPathメソッドにてXPathで取得できるlistを部分一致検索で複数選択できる様にeles変数に代入します。Xpathの部分一致検索は、こちらのページを参照ください。
6~8行目:For Eachでelesをループして、Ctrl + Clickで複数選択を実行します。

ChromeのディベロッパーツールでXpathの構造を視覚で確認したいと思います。

1項目の<option value="1">のXPathをコピーすると、以下のテキストを取得します。
//*[@id="list1"]/option[1]
このXPathから部分一致検索で5行分を選択するためにcontains表現を利用します。

*[contains(@id,'list1')]:Xpathでidがlist1になっているノードをキャッチししています。"*"を"select"に置換えてもOKです。
*[contains(@option,'')]:list1の下層にある要素の内、option要素を全て選択するため、シングルクォーテーション(')を二つ並べて、値を指定しない様にします。分かりにくいですが、''はダブルクォーテーションではなく、シングルクォーテーションを二つ並べている状態です。色々やり方を試してみましたが、要素を全て選択するためには、値を入力しない方法が正解の様です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

VBAを中心とした自動化、効率化の手法を紹介しています。現在は、SeleniumBasicのexamplesを紹介しています。その内、SeleniumBasic以外の手法も掲載したいと思っております。

目次