【PowerShell】Selenium-Module Clear-SeAlert ダイアログボックス操作

目次

概要

 Clear-SeAlertはダイアログボックスをアラート型オブジェクトとしてキャッチし、処理します。ダイアログボックスは、ブラウザ操作中に出現してくる確認画面や、入力ボックスのことで、JavaScrioptで制御されています。以下、ダイアログボックスのサンプルです。

 PowerShellでSeleniumを利用するに当たって、ある程度簡易的にSeleniumを利用できる様に専用のモジュールがGitHubに用意されています。いきなりPowerShellでSeleniumを扱うより、Seleniumを-Moduleを利用した方が簡単にPowerShellでSleniumを利用することができます。環境構築するには、以下ページを参照してみてください。

コマンド(Commond)

Clear-SeAlert

代替コマンド(Alias)

SeAccept, SeDismiss

構文(Syntax)

Clear-SeAlert [-Target <Object>] [-Action <Object>] [-PassThru] [<CommonParameters>]

オプション

Name引数型解説Short Example
TargetObject対象要対象driverの指定Clear-SeAlert -Target $Driver -Action Dismiss -PassThru
ActionObjectAcceptかDismissを入力。指定しない場合は、Dissmissがデフォルト設定Clear-SeAlert -Target $Driver -Action Dismiss -PassThru
PassThruダイアログボックスに表示されている文字列を返すClear-SeAlert -Target $Driver -Action Dismiss -PassThru
CommonParametersstring共通パラメータ

※ShortExampleは、動作確認ができたコードを記載しています。

Example

 使用例の2パターン紹介します。基本メソッドのClear-SeAlertを使用した方法とAliasでコードを短縮した使用方法の2パターン紹介します。ダイアログボックスを出現させた後「キャンセル」を選択し、再度出現するダイアログボックスの「OK」ボタンを選択します。

Clear-SeAlertを使用した基本パターン

$Driver = Start-SeChrome -StartURL "https://www.tagindex.com/javascript/window/confirm.html" -Quiet
$Element = Get-SeElement -Target $Driver -CssSelector "#content > section.overview > figure > p > input[type=button]"
Send-SeClick -Element $Element
Start-Sleep -Seconds 2
Clear-SeAlert -Target $Driver -Action Dismiss -PassThru
Start-Sleep -Seconds 1
Clear-SeAlert -Target $Driver -Action Accept
Start-Sleep -Seconds 2
Stop-SeDriver $Driver

Alias(SeAccept, SeDismiss)使用のパターン

$Driver = Start-SeChrome -StartURL "https://www.tagindex.com/javascript/window/confirm.html" -Quiet
$Element = Get-SeElement -Target $Driver -CssSelector "#content > section.overview > figure > p > input[type=button]"
Send-SeClick -Element $Element
Start-Sleep -Seconds 2
SeDismiss -Target $Driver -PassThru
Start-Sleep -Seconds 1
SeAccept -Target $Driver
Start-Sleep -Seconds 2
Stop-SeDriver $Driver

Module

Clear-SeAlertのSelenium-Module構文を以下に掲載します。

function Clear-SeAlert {
    [Alias('SeAccept', 'SeDismiss')]
    param (
        [parameter(ParameterSetName = 'Alert', Position = 0, ValueFromPipeline = $true)]
        $Alert,
        [parameter(ParameterSetName = 'Driver')]
        [ValidateIsWebDriverAttribute()]
        [Alias("Driver")]
        $Target = $Global:SeDriver,
        [ValidateSet('Accept', 'Dismiss')]
        $Action = 'Dismiss',
        [Alias('PT')]
        [switch]$PassThru
    )
    if ($Target) {
        try { $Alert = $Target.SwitchTo().alert() }
        catch { Write-Warning 'No alert was displayed'; return }
    }
    if (-not $PSBoundParameters.ContainsKey('Action') -and
        $MyInvocation.InvocationName -match 'Accept') { $Action = 'Accept' }
    if ($Alert) { $alert.$action() }
    if ($PassThru) { $Alert }
}
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

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

目次