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.