概要
Web要素制御用のクラス
オブジェクト設定
・変数宣言
Dim ele As WebElement
文法
Set ele = driver.[SerchContext]
ele.[メソッド]
メソッド・プロパティ
メソッド
スクロールできます
Name | 解説 | Short Example |
---|---|---|
AsSelect | WebElement を Select 要素に代入 | Set ele = Driver.FindElementById("dropdown").AsSelect |
AsTable | WebElement を Table 要素に代入 | driver.FindElementById("table1").AsTable.ToExcel |
Attribute | 属性値を取得 | Debug.Print ele.Attribute("textContent") |
Clear | テキスト入力要素の場合、テキストをクリア | ele.Clear |
Click | 要素をクリック | ele.Click |
ClickAndHold | 要素クリックを保持 | |
ClickByOffset | 取得要素からX,Y軸指定で移動し、クリック | ele.ClickByOffset 210,0 |
ClickContext | 要素を右クリック | ele.ClickContext |
ClickDouble | 要素をダブルクリック | ele.ClickDouble |
CssValue | Cssプロパティを返す | Debug.Print ele.CssValue("font-style") |
DragAndDropToOffset | 要素のドラッグ&ドロップ (向先xy軸指定) | |
DragAndDropToWebElement | 要素のドラッグ&ドロップ (向先要素指定) | |
Equals(WebElement) | 指定Web要素と一致するか判定 | Debug.Print ele.Equals(ele2) |
ExecuteAsyncScript | JavaScriptコードを非同期で実行 | |
ExecuteScript | JavaScriptコードの実行 | ele.ExecuteScript JS_ADD_YELLOW_BORDER |
HoldKeys | キー押下を保持 | ele.HoldKeys Keys.Control |
Location | レンダリング可能なキャンバス内の要素の位置を返す | Debug.Print ele.Location.X & " : " & ele.Location.Y |
LocationInView | 対象の要素が表示可能な位置までスクロールし、要素の位置を返す。 | Debug.Print ele.LocationInView.X & " : " & ele.LocationInView.Y |
ReleaseKeys | キーボードを離す | |
ReleaseMouse | マウスを離す | |
ScrollIntoView | 要素をブラウザ ウィンドウの表示領域にスクロール | ele.ScrollIntoView |
SendKeys | キーボード入力操作 | ele.SendKeys "V" |
Size | 要素のサイズを返す | Debug.Print elm.Size().Height Debug.Print elm.Size().Width |
Submit | フォームを送信 | ele.Submit |
TakeScreenshot | 現在の要素のスクリーンショットを取得 | Set img = elm.TakeScreenshot() |
Text | 要素のテキスト取得 | Debug.Print ele.Text |
TextAsNumber | 要素のテキストから抽出した数値を返す | Debug.Print Driver.FindElementByCss("#frame-interlang").TextAsNumber |
TextMatch | 指定された入力文字列を検索して、パターン パラメーターで指定された正規表現が出現するかどうかを調べる | |
TextMatches | 正規表現に一致するすべての出現を返します | |
Until | デリゲート関数がnot null ot true 以外を返すのを待機 | |
Value | Value属性を返す | |
WaitAttribute | 属性を指定して合致すれば通過 | ele.WaitAttribute "textContent", "コモンズ", 10000 |
WaitCssValue | Cssプロパティを待機 | ele.WaitCssValue "font-style", "normal", 5000 |
WaitDisplayed | 要素が表示されるのを待機 | ele.WaitDisplayed |
WaitEnabled | 要素が有効になるまで待機 | ele.WaitEnabled |
WaitForScript | スクリプトが true or not null を返すのを待機 | |
WaitNotAttribute | 別の属性を待機 | ele.WaitNotAttribute "textContent", "MediaWiki", 2000 |
WaitNotCssValue | 別のcssプロパティを待機 | ele.WaitNotCssValue "font-style", "hoge", 2000 |
WaitNotText | 要素テキストに該当しなければ通過 | ele.WaitNotText "hoge", 2000 |
WaitRemoval | Web 要素が DOM から削除されるまで待機 | ele.WaitRemoval 2000 |
WaitSelection | 要素が選択(True)or非選択(False)になるのを待機(デフォルトはTrue) | ele.WaitSelection True, 2000 |
WaitText | 要素テキストに該当すれば通過(部分一致検索が可能) | ele.WaitText "コモ", 10000 |
※Short Exampleは、動作確認ができたコードを記載しています。
メソッド(SearchContextからのクラス継承)
WebElement中のSearchContextとなるため、文法は以下表現になります。
driver.[SerchContext親].[SerchContext子]
FindeElementで親ノードの要素を取得した後、子ノードの要素を取得したい時に利用できます。
コードとしては、FindElementを2回利用している感じになります。
driver.[SerchContext]の利用方法は、こちらを参照ください。
スクロールできます
Name | 解説 | ShortExample |
---|---|---|
FindElement | 指定メソッドを使用して最初の Web要素 を検索、取得 | |
FindElementBy | Byクラスを利用し、Web要素検索、取得 | |
FindElementByClass | CSSクラスの値でWeb要素検索、取得 | Debug.Print ele.FindElementByClass("header").Text |
FindElementByCss | CSSセレクタの値でWeb要素検索、取得 | Debug.Print ele.FindElementByCss("thead").Text |
FindElementById | Idの値でWeb要素検索、取得 | |
FindElementByLinkText | リンクテキストでWeb要素検索、取得(完全一致) | Debug.Print ele.FindElementByLinkText("edit").Text |
FindElementByName | Nameの値でWeb要素検索、取得 | |
FindElementByPartialLinkText | リンクテキストでWeb要素検索、取得(部分一致) | Debug.Print ele.FindElementByPartialLinkText("ed").Text |
FindElementByTag | Tag名でWeb要素検索、取得 | |
FindElementByXPath | XPathWeb要素検索、取得 | |
FindElements | 指定メソッドを使用して検索ヒットしたWeb要素を全て取得 | |
FindElementsBy | Byクラスで検索ヒットしたWeb要素を全て取得 | |
FindElementsByClass | CSSクラスの値で検索ヒットしたWeb要素を全て取得 | |
FindElementsByCss | CSSセレクタの値で検索ヒットしたWeb要素を全て取得 | ele.FindElementsByCss("tbody tr td:nth-child(2)") |
FindElementsById | Idの値で検索ヒットしたWeb要素を全て取得 | |
FindElementsByLinkText | リンクテキストで検索ヒットしたWeb要素を全て取得(完全一致) | |
FindElementsByName | Nameの値で検索ヒットしたWeb要素を全て取得 | |
FindElementsByPartialLinkText | リンクテキストで検索ヒットしたWeb要素を全て取得(部分一致) | |
FindElementsByTag | Tag名で検索ヒットしたWeb要素を全て取得 | |
FindElementsByXPath | Xpath名で検索ヒットしたWeb要素を全て取得 | Set eles = eles_base.Item(1).FindElementsByXPath("//*[@id='table1']/tbody//td[2]") |
IsElementPresent | 指定のWeb要素がページ内に存在するか確認 | |
WaitNotElement | 要素が無くなるのを待機 |
※Short Exampleは、動作確認ができたコードを記載しています。
プロパティ
スクロールできます
Name | 解説 | Short Example |
---|---|---|
IsDisplayed | 要素が表示されるかどうかTrue or Falseを返す。 取得した要素がtype="hidden" の場合、Falseを返す。 | Debug.Print "IsDisplayed:" & ele.IsDisplayed |
IsEnabled | 要素が有効かどうかTrue or Falseを返す。 取得した要素がdisabled="true"の場合、Falseを返す。 | Debug.Print "IsEnabled:" & ele.IsEnabled |
IsPresent | 要素が存在かどうかTrue or Falseを返す | Debug.Print "IsPresent:" & ele.IsPresent |
IsSelected | 要素が選択されているかどうかTrue or Falseを返す。 取得した要素がSelect属性の場合、Trueを返す。 | Debug.Print "IsSelected:" & ele.IsSelected |
TagName | 要素のタグ名を取得 | Debug.Print ele.tagname |
※Short Exampleは、動作確認ができたコードを記載しています。
Example
Find_Element_input
Private Sub Find_Element_input()
Dim Driver As New ChromeDriver
Driver.Get "https://www.google.co.jp"
Dim ele As WebElement, ele2 As WebElement
Set ele = Driver.FindElementByName("q")
Set ele2 = Driver.FindElementByName("q")
Debug.Print ele.Equals(ele2)
ele.SendKeys "Eiffel tower"
Driver.Wait 1000
ele.Clear
Driver.Wait 2000
' ele.SendKeys "Eiffel tower" & Driver.Keys.Return
ele.SendKeys "Eiffel tower", Driver.Keys.Return
Driver.Wait 2000
Driver.Quit
End Sub
Use_WaitMethod
Private Sub Use_WaitMethod()
Dim Driver As New ChromeDriver
Driver.Get "https://ja.wikipedia.org/wiki/メインページ"
Dim ele As WebElement, str As String
str = "#sister-projects-list > div:nth-child(1) > div:nth-child(2) > b > a"
Set ele = Driver.FindElementByCss(str)
ele.WaitAttribute "textContent", "コモンズ", 10000
ele.WaitText "コモ", 10000
ele.WaitCssValue "font-style", "normal", 5000
ele.WaitNotAttribute "textContent", "MediaWiki", 2000
ele.WaitNotCssValue "font-style", "hoge", 2000
ele.WaitNotText "hoge", 2000
ele.WaitRemoval 2000
Driver.Quit
End Sub
Use_Attribute
Private Sub Use_Attribute()
Dim Driver As New ChromeDriver
Driver.Get "https://ja.wikipedia.org/wiki/メインページ"
Dim ele As WebElement, str As String
str = "#sister-projects-list > div:nth-child(1) > div:nth-child(2) > b > a"
Set ele = Driver.FindElementByCss(str)
Debug.Print ele.Attribute("textContent")
Debug.Print ele.CssValue("font-style")
Debug.Print ele.Text
Debug.Print Driver.FindElementByCss("#frame-interlang").TextAsNumber
Set ele = Driver.FindElementByCss(str).WaitAttribute("textContent", "コモンズ", 10000)
ele.WaitAttribute "textContent", "コモンズ", 10000
ele.WaitText "コモ", 10000
Dim i As Long
For i = 0 To 500 Step 10
ele.ClickByOffset 100 + i, 0
If Not ele.IsPresent Then Exit For
Next i
Driver.Wait 2000
Driver.Quit
End Sub
Use_Click
Private Sub Use_Click()
Dim Driver As New ChromeDriver
Driver.Get "https://ja.wikipedia.org/wiki/メインページ"
Dim ele As WebElement, str As String
str = "#sister-projects-list > div:nth-child(1) > div:nth-child(2) > b > a"
Set ele = Driver.FindElementByCss(str)
ele.ClickContext
ele.ClickDouble
Driver.Wait 2000
Driver.Quit
End Sub
Use_Location
Private Sub Use_Location()
Dim Driver As New selenium.ChromeDriver
Dim ele As WebElement
Driver.Get "https://ja.wikipedia.org/wiki/メインページ"
Set ele = Driver.FindElementByCss("#sister-projects-list > div:nth-child(1) > div:nth-child(2) > b > a")
Debug.Print ele.Location.X & " : " & ele.Location.Y
Debug.Print ele.LocationInView.X & " : " & ele.LocationInView.Y
ele.ScrollIntoView
Driver.Wait 2000
Driver.Quit
End Sub
Usage_ClipBoard
Private Sub Usage_ClipBoard()
Dim Keys As New selenium.Keys
Dim Driver As New selenium.ChromeDriver
Dim ele As WebElement
Driver.Get "https://google.co.jp"
Driver.SetClipBoard "いろはにほへと"
Set ele = Driver.FindElementByName("q")
ele.HoldKeys Keys.Control
ele.SendKeys "V"
Driver.Wait 2000
ele.ReleaseKeys Keys.Control 'リリース不可
Driver.Wait 2000
ele.SendKeys "V"
Driver.Wait 2000
Driver.Quit
End Sub
Use_Size
Private Sub Use_Size()
Dim Driver As New ChromeDriver
Driver.Get "https://ja.wikipedia.org/wiki/メインページ"
Dim img As selenium.Image
Dim elm As selenium.WebElement
Set elm = Driver.FindElementByXPath("//*[@id='sister-projects-list']")
Driver.Actions.MoveToElement(elm).Perform
Debug.Print "Height:" & elm.Size().Height
Debug.Print "Width:" & elm.Size().Width
Driver.Quit
End Sub
Use_property
Private Sub Use_property()
Dim Driver As New ChromeDriver
Driver.Get "https://ja.wikipedia.org/wiki/メインページ"
Dim ele As WebElement, str As String
str = "#sister-projects-list > div:nth-child(1) > div:nth-child(2) > b > a"
Set ele = Driver.FindElementByCss(str)
Debug.Print "IsDisplayed:" & ele.IsDisplayed
Debug.Print "IsEnabled:" & ele.IsEnabled
Debug.Print "IsPresent:" & ele.IsPresent
Debug.Print "IsSelected:" & ele.IsSelected
Debug.Print ele.tagname
Driver.Wait 2000
Driver.Quit
End Sub
Use_IsDisplay
Private Sub Use_IsDisplay()
Dim Driver As New ChromeDriver
Driver.Get "https://google.co.jp"
Dim ele As WebElement, str As String
Set ele = Driver.FindElementByCss("#tophf > input[type=hidden]:nth-child(1)") 'type = hidden
ele.WaitDisplayed False, 2000
Debug.Print "IsDisplayed:" & ele.IsDisplayed
Debug.Print "IsPresent:" & ele.IsPresent
Debug.Print ele.tagname
Driver.Wait 2000
Driver.Quit
End Sub
Use_IsEnabled
Private Sub Use_IsEnabled()
Dim Driver As New ChromeDriver
Driver.Get "https://itsakura.com/js-disabled#s2"
Dim ele As WebElement, str As String
Set ele = Driver.FindElementByCss("#b2")
Debug.Print "IsEnabled:" & ele.IsEnabled
Driver.FindElementByCss("#btn2").Click
ele.WaitEnabled False, 2000
Debug.Print "IsEnabled:" & ele.IsEnabled
Debug.Print "IsPresent:" & ele.IsPresent
Driver.Wait 2000
Driver.Quit
End Sub
Use_IsSelected
Private Sub Use_IsSelected()
Dim Driver As New ChromeDriver
Driver.Get "https://digitor.jp/textbook/html-pull-down/"
Dim ele As WebElement, str As String
Set ele = Driver.FindElementByXPath("/html/body/div[4]/div[2]/div[1]/div[5]/select/option[3]")
Debug.Print "IsSelected:" & ele.IsSelected
ele.Click
ele.WaitSelection True, 2000
Debug.Print "IsSelected:" & ele.IsSelected
Driver.Wait 2000
Driver.Quit
End Sub
Use_WebEle_findEle
Private Sub Use_WebEle_findEle()
Dim driver As New ChromeDriver
Dim ele As WebElement
driver.Get "https://the-internet.herokuapp.com/tables"
Set ele = driver.FindElementById("table1")
Debug.Print ele.FindElementByClass("header").Text
Debug.Print ele.FindElementByCss("thead tr th:nth-child(1)").Text
Debug.Print ele.FindElementByCss("thead").Text
Debug.Print ele.FindElementByLinkText("edit").Text
Debug.Print ele.FindElementByPartialLinkText("ed").Text
Stop
driver.Quit
End Sub
Use_FindEles_Css
Private Sub Use_FindEles_Css()
Dim driver As New ChromeDriver
driver.Get "https://the-internet.herokuapp.com/tables"
Dim eles As WebElements, ele As WebElement, buf As WebElement
Set ele = driver.FindElementById("table1")
Set eles = ele.FindElementsByCss("tbody tr td:nth-child(2)")
For Each buf In eles
Debug.Print buf.Text
Next buf
driver.Quit
End Sub
Use_FindEles_XPath
Private Sub Use_FindEles_XPath()
Dim driver As New ChromeDriver
driver.Get "https://the-internet.herokuapp.com/tables"
Dim eles_base As WebElements, eles As WebElements, ele As WebElement
Set eles_base = driver.FindElementsByClass("tablesorter")
Set eles = eles_base.Item(1).FindElementsByXPath("//*[@id='table1']/tbody//td[2]")
For Each ele In eles
Debug.Print ele.Text
Next ele
driver.Quit
End Sub