【PowerShell】Selenium-Module Switch-SeFrame フレームの移動

目次

概要

 起動しているブラウザにフレームがある場合、フレームの移動に使用するメソッドになります。

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

コマンド(Commond)

Switch-SeFrame

代替コマンド(Alias)

SeFrame

構文(Syntax)

  • Switch-SeFrame [-Frame] <Object> [-Target <Object>] [<CommonParameters>]
  • Switch-SeFrame -Parent [-Target <Object>] [<CommonParameters>]
  • Switch-SeFrame -Root [-Target <Object>] [<CommonParameters>]

オプション

Name引数型解説Short Example
TargetObject対象ドライバーの指定Switch-SeFrame -Target $Driver -Frame "frame-top"
FrameObjectフレーム名の指定Switch-SeFrame -Target $Driver -Frame "frame-middle"
Parentstring親フレームの指定Switch-SeFrame -Target $Driver -Parent
Rootstringルート(全体)フレームの指定Switch-SeFrame -Target $Driver -Root
CommonParameters共通パラメータ

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

Example

$Driver = Start-SeChrome -Quiet
Enter-SeUrl "https://the-internet.herokuapp.com/nested_frames" -Driver $Driver
#上段
Switch-SeFrame -Target $Driver -Frame "frame-top"
$Element = Get-SeElement -Target $Driver -TagName "frame"
Write-Host "上段フレーム数:"$Element.Count
#上段真中
Switch-SeFrame -Target $Driver -Frame "frame-middle"
$Element = Get-SeElement -Target $Driver -Id "content"
Write-Host "移動先フレーム名:"$Element.Text
#親フレーム
Switch-SeFrame -Target $Driver -Parent
$Element = Get-SeElement -Target $Driver -TagName "frame"
Write-Host "親(上段)フレーム数:"$Element.Count
#全体フレーム
Switch-SeFrame -Target $Driver -Root
$Element = Get-SeElement -Target $Driver -TagName "frame"
Write-Host "全体フレーム数:"$Element.Count

Start-Sleep 2
Stop-SeDriver $Driver

Module

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

function Switch-SeFrame {
    [Alias('SeFrame')]
    param (
        [Parameter(Mandatory = $true, ParameterSetName = 'Frame', Position = 0)]
        $Frame,

        [Parameter(Mandatory = $true, ParameterSetName = 'Parent')]
        [switch]$Parent,

        [Parameter(Mandatory = $true, ParameterSetName = 'Root')]
        [Alias('defaultContent')]
        [switch]$Root,

        [Parameter(ValueFromPipeline = $true)]
        [Alias("Driver")]
        [ValidateIsWebDriverAttribute()]
        $Target = $Global:SeDriver
    )
 
    if ($frame) { [void]$Target.SwitchTo().Frame($Frame) }
    elseif ($Parent) { [void]$Target.SwitchTo().ParentFrame() }
    elseif ($Root) { [void]$Target.SwitchTo().defaultContent() }
}
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

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

目次