1

Selenium WebDriver で Pester を使用しています。WebDriver は、対応する「Describe」ブロック内の「BeforeAll」ブロックで初期化され、結果のインスタンスが $driver 変数に割り当てられます。次に、'Describe' および 'It' ブロックで、PowerShell で自動ロードされる外部 PowerShell モジュールにあるカスタム関数を呼び出します。これらの関数は、'BeforeAll' ブロックで定義された $driver 変数にアクセスできるはずですが、アクセスできず、次のエラー メッセージが表示されます。

RuntimeException: null 値の式でメソッドを呼び出すことはできません。

Search.Tests.ps1 Pester スクリプトのコードは次のとおりです。

Describe "Search for something" -Tag something {    

BeforeAll {
    $driver = New-WebDriver
    $driver.Navigate().GoToUrl('http://example.com')
}

AfterAll {
    $driver.Close()
    $driver.Dispose()
    $driver.Quit()
}

Find-WebElement -Selector ('some_selector')

    It "Something is found in search results" {
        GetTextFrom-WebElement -Selector ('some_selector') | Should Be 'something'
    }
}

Find-WebElement と GetTextFrom-WebElement は、$driver を使用して CSS で要素を取得し、要素の内部テキストを抽出するヘルパー関数です。

この問題を調査し、回避策を見つけましたが、それはエレガントな方法ではないと思います。回避策は、次のように param ブロックの直後にある外部 PowerShell モジュールの各ヘルパー関数で $driver を再定義することです。

$driver = $PSCmdlet.GetVariableValue('driver')

このようにして、関数は $driver を認識でき、すべてが機能します。

私の質問:何かをすることは可能ですか?関数は常に $driver にアクセスでき、それぞれのドライバーを再定義する必要はありませんか?

4

1 に答える 1