Selenium WebDriverをPowerShellから使用しやすくするラッパークラス+便利な関数群
- 使用したいブラウザ用のDriverをインストールしてPATHを通しておきます
- このレポジトリをダウンロードしてPowerShellのモジュールディレクトリに配置します
-
Google Chrome
https://chromedriver.chromium.org/ -
Mozilla Firefox
https://github.com/mozilla/geckodriver -
Microsoft Edge
https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
※PSWebDriverはEdge(Legacy)、Edge(Chromium)の両方をサポートしています -
Internet Explorer
https://selenium.dev/downloads/
※Internet Explorerを使用する場合、追加の設定が必要ですのでご注意ください
- Windows PowerShell 5.1
- PowerShell 7.0 or later (Only on Windows)
Google Chromeを使用してDuckDuckGoを開き、"PowerShell"と検索、検索結果のスクリーンショットを取得してブラウザを終了する例
#インスタンスの生成
$Browser = New-PSWebDriver 'Chrome' #Chrome/Firefox/Edge/EdgeChromium/IE/HeadlessChrome/HeadlessFirefox
#ブラウザを起動
$Browser.Start()
#DuckDuckGoを開く
$Browser.Open('https://duckduckgo.com/')
#検索ボックスに"PowerShell"と入力
$Browser.SendKeys('id=search_form_input_homepage', 'PowerShell')
#検索ボタンをクリック
$Browser.Click('id=search_button_homepage')
#スクリーンショットを保存
$Browser.SaveScreenShot('D:\screenshot.png')
#ブラウザを閉じる
$Browser.Close()
Selenium WebDriverをPowerShellから利用するためのラッパークラスです。
メソッド名などSelenium IDEで作成したテストケースをPowerShellスクリプトに置き換えやすくするよう意識しています。
PSWebDriver
クラスのインスタンスを生成するにはNew-PSWebDriver
関数を使用します。
$WebDriver = New-PSWebDriver -Name 'Chrome'
名前 | 型 | 説明 |
---|---|---|
Driver | 未定義 | WebDriverインスタンス ラップされていないWebDriverネイティブのメソッドを利用したい場合に使えます |
BrowserOptions | OpenQA.Selenium.DriverOptions | ブラウザにオプションパラメータを指定する際に使用可能です |
DriverService | OpenQA.Selenium.DriverService | ブラウザにオプションパラメータを指定する際に使用可能です |
名前 | 戻り値型 | 説明 |
---|---|---|
Start() | void | ブラウザを起動します |
Start([Uri]$URL) | void | ブラウザを起動し、$URL で指定されたページを開きます |
Open([Uri]$URL) | void | $URL で指定されたページを開きます |
Close() | void | カレントウィンドウを閉じます |
Quit() | void | ブラウザを閉じます |
名前 | 戻り値型 | 説明 |
---|---|---|
SetImplicitWait([int]$TimeoutInSeconds) | void | 要素検索やページ読込時の暗黙的な待機時間(秒)を指定します |
GetWindowSize() | System.Drawing.Size | ブラウザのウィンドウサイズを取得します |
SetWindowSize([System.Drawing.Size]$Size) | void | ブラウザのウィンドウサイズを変更します |
SetWindowSize([int]$Width,[int]$Height) | void | ブラウザのウィンドウサイズを変更します |
GetBrowserInfo() | HashTable | 起動中ブラウザの名前、バージョン、プラットフォーム情報を取得します |
名前 | 戻り値型 | 説明 |
---|---|---|
FindElement([string]$SelectorExpression) | Object | $SelectorExpression で指定されるページ内の要素を取得します |
FindElements([string]$SelectorExpression) | Object[] | $SelectorExpression にマッチする全ての要素を取得します |
IsElementPresent([string]$SelectorExpression) | bool | $SelectorExpression で指定される要素が存在するか確認します |
GetText([string]$SelectorExpression) | string | $SelectorExpression で指定される要素のinnerTextを取得します |
GetAttribute([string]$SelectorExpression, [string]$Attribute) | string | $SelectorExpression で指定される要素内の$Attribute 属性値を取得します |
GetTitle() | string | 現在開いているページタイトルを取得します |
GetLocation() | string | 現在開いているページURLを取得します |
IsAlertPresent() | bool | アラートが表示されているか確認します |
名前 | 戻り値型 | 説明 |
---|---|---|
SendKeys([string]$Target, [string]$Value) | void | $Target (SelectorExpression)で指定される要素に対して$Value を入力します特殊キーの送信については下部の「特殊キーの入力について」を参照してください |
ClearAndType([string]$Target, [string]$Value) | void | $Target (SelectorExpression)で指定される要素に対して$Value を入力します既存の内容をクリアしてから入力する点が SendKeys() との違いです(Selenium IDEの Type コマンドに相当します) |
Click([string]$Target) | void | $Target (SelectorExpression)で指定される要素をクリックします |
DoubleClick([string]$Target) | void | $Target (SelectorExpression)で指定される要素をダブルクリックします |
RightClick([string]$Target) | void | $Target (SelectorExpression)で指定される要素を右クリックします |
Select([string]$Target, [string]$Value) | void | $Target (SelectorExpression)で指定されるSelect要素から$Value をテキストに持つ要素を選択します |
CloseAlert() | void | アラートを閉じます |
CloseAlertAndGetText([bool]$Accept) | string | アラートテキストを取得し、アラートを閉じます$Accept でアラートに対するOK or Cancel を指定できます |
名前 | 戻り値型 | 説明 |
---|---|---|
WaitForPageToLoad([int]$Timeout) | bool | ページの読み込みが完了するか、$Timeout で指定された秒数が経過するまで待機します読み込み完了の場合は $true 、タイムアウトの場合は$false を返します |
WaitForElementPresent([string]$Target, [int]$Timeout) | bool | $Target (SelectorExpression)で指定される要素が見つかるか、$Timeout で指定された秒数が経過するまで待機します要素が見つかった場合は $true 、タイムアウトの場合は$false を返します |
WaitForNotElementPresent([string]$Target, [int]$Timeout) | bool | $Target (SelectorExpression)で指定される要素が見つからないか、$Timeout で指定された秒数が経過するまで待機します |
WaitForValue([string]$Target, [string]$Value, [int]$Timeout) | bool | $Target (SelectorExpression)で指定される要素のvalue 属性が$Value で指定された値と一致するか、$Timeout で指定された秒数が経過するまで待機します |
WaitForNotValue([string]$Target, [string]$Value, [int]$Timeout) | bool | $Target (SelectorExpression)で指定される要素のvalue 属性が$Value で指定された値と異なるか、$Timeout で指定された秒数が経過するまで待機します |
WaitForText([string]$Target, [string]$Value, [int]$Timeout) | bool | $Target (SelectorExpression)で指定される要素の要素値が$Value で指定された値と一致するか、$Timeout で指定された秒数が経過するまで待機します |
WaitForNotText([string]$Target, [string]$Value, [int]$Timeout) | bool | $Target (SelectorExpression)で指定される要素の要素値が$Value で指定された値と異なるか、$Timeout で指定された秒数が経過するまで待機します |
WaitForVisible([string]$Target, [int]$Timeout) | bool | $Target (SelectorExpression)で指定される要素が表示されるか、$Timeout で指定された秒数が経過するまで待機します |
WaitForNotVisible([string]$Target, [int]$Timeout) | bool | $Target (SelectorExpression)で指定される要素が表示されなくなるか、$Timeout で指定された秒数が経過するまで待機します |
WaitForTitle([string]$Value, [int]$Timeout) | bool | 現在のページタイトルが$Value と一致するか、$Timeout で指定された秒数が経過するまで待機します |
WaitForNotTitle([string]$Value, [int]$Timeout) | bool | 現在のページタイトルが$Value と異なるか、$Timeout で指定された秒数が経過するまで待機します |
Pause([int]$WaitTimeInMilliSeconds) | void | $WaitTimeInMilliSeconds で指定された時間(ミリ秒)待機します([System.Threading.Thread]::Sleep()と同等です) |
名前 | 戻り値型 | 説明 |
---|---|---|
ExecuteScript([string]$Script) | string | ページ上でJavaScriptを実行します |
ExecuteScript([string]$Target, [string]$Script) | string | $Target (SelectorExpression)で指定される要素に対してJavaScriptを実行します |
名前 | 戻り値型 | 説明 |
---|---|---|
SaveScreenShot([string]$FileName) | void | スクリーンショットを保存します 画像形式はPNGです |
SaveScreenShot([string]$FileName, [string]$ImageFormat) | void | 画像形式を指定してスクリーンショットを保存します$ImageFormat に指定可能な値はPng ,Jpeg ,Gif ,Tiff ,Bmp です |
StartAnimationRecord([int]$Interval) | void | ブラウザ表示の動画記録を開始します$Interval (ミリ秒)で指定した間隔で記録します記録間隔の最小値は500msです 最大1200フレームまで記録できます |
StopAnimationRecord() | void | StartAnimationRecord() で開始した動画記録を終了します記録された動画は破棄されます |
StopAnimationRecord([string]$FileName) | void | StartAnimationRecord() で開始した動画記録を終了し、ファイルに保存します動画形式はアニメーションGIFです |
Webページ上の特定要素を指定するためのパターン文字列です。
Selenium IDEのlocatorに相当します。書式もlocatorとほぼ同等です。
以下の7種類が使用可能です。
-
IDパターン
id
属性値を指定して要素を特定します。
書式は"id=idvalue"
です。 -
Nameパターン
name
属性値を指定して要素を特定します。
書式は"name=elementname"
です。 -
Tagパターン
DOMタグを指定して要素を特定します。
書式は"tag=tagname"
です。 -
ClassNameパターン
Class名を指定して要素を特定します。
書式は"classname=classname"
です。 -
LinkTextパターン
LinkのTextを指定して要素を特定します。※完全一致
書式は"link=linktext"
です。 -
XPathパターン
XPath構文を使用して要素を特定します。
書式は"xpath=xpath"
です。
SelectorExpressionが/
で始まる場合もXPathパターンとみなされます。
("xpath=/html/body/h1"
と"/html/body/h1"
は同等です) -
CSSセレクタパターン
CSSセレクタを使用して要素を特定します。
書式は"css=selector"
です。
WaitForText()
やWaitForValue()
など要素値を検証する一部のメソッドでは検索対象文字列に特殊な書式を使用することで検索パターンを指定することができます。
-
グロビングパターン
いわゆるワイルドカード検索です。PowerShellの-like
演算子に相当します。
特殊な書式を使用しない場合はデフォルトでグロビングパターンが使用されます。
明示的に指定する場合は検索文字列の前にglob:
を付けます。
例)glob:sometext*
-
正規表現パターン
正規表現を用いて検索します。PowerShellの-match
演算子に相当します。
検索文字列の前にregexp:
を付けます。
例)regexp:^Number[0-9]
-
完全一致パターン
完全一致検索を行います。PowerShellの-eq
演算子に相当します。
*(アスタリスク)
などの特殊文字を検索したい場合に使用します。
検索文字列の前にexact:
を付けます。
例)exact:***asterisk****
SendKeys()
やClearAndType()
でEnterキーや矢印キーなどの特殊キーを送信する場合は、${KEY_CODE}
という書式を使用します。
使用可能なKEY_CODEの一覧はこちら
例)SendKeys()
メソッドを使用してABC[Backspace][Enter]と入力する例
$Browser.SendKeys('id=target', 'ABC${KEY_BACKSPACE}${KEY_ENTER}')
Copyright (c) 2021 mkht PSWebDriver is released under the MIT License https://github.com/mkht/PSWebDriver/blob/master/LICENSE
PSWebDriver includes these software / libraries.
Selenium.WebDriver Copyright (c) Software Freedom Conservancy Licensed under the Apache 2.0 License.
Selenium.Support Copyright (c) Software Freedom Conservancy Licensed under the Apache 2.0 License.
edge-selenium-tools Copyright (c) Microsoft Licensed under the Apache 2.0 License.
AnimatedGif Copyright (c) mrousavy Licensed under the MIT License.