3

これは簡単なことだと思うかもしれませんが、 Powershell でChromium Edge Selenium webdriver ウィンドウが最小化されているかどうかを検出する方法が見つかりません。

具体的には、Window のサイズと位置は、最大化された状態でも最小化された状態でも同じように見えます。たとえば、次の例を見てください (最小化されていない通常のウィンドウ状態から開始)。

> $driver.manage().Window.size

IsEmpty Width Height
------- ----- ------
  False  1050    708

> $driver.manage().Window.position

IsEmpty  X  Y
-------  -  -
  False 13 18

> $driver.manage().Window.minimize()
> $driver.manage().Window.size

IsEmpty Width Height
------- ----- ------
  False  1050    708

> $driver.manage().Window.position

IsEmpty  X  Y
-------  -  -
  False 13 18

ご覧のとおり、ウィンドウが最小化されていても、ウィンドウのサイズと位置は同じままです。

isMinimized()メソッドやそれに似たものもどこにも見つかりません。

Chromium Edge Web ドライバーのバージョンは 93.0.961.38 です。

何か案は?

4

3 に答える 3

1

私の解決策は、最大化されたセレンエッジドライバーインスタンスの開始を強制することです。したがって、edgedriver がインスタンス化される前と後のプロセス リストが比較され、'msedge' プロセスに対してフィルター処理され、最初に最小化され、その後最大化されます。

$workingPath = 'C:\selenium'

if (($env:Path -split ';') -notcontains $workingPath) {
    $env:Path += ";$workingPath"
}

[System.Reflection.Assembly]::LoadFrom("$($workingPath)\WebDriver.dll")

# get all listening processes before new edgedriver is started
$processesBefore = $(netstat -aon | findstr LISTENING)

# launch edgedriver
$EdgeDriver = New-Object OpenQA.Selenium.Edge.EdgeDriver

# get all listening processes after edgedriver started
$processesAfter = $(netstat -aon | findstr LISTENING)

# get the differencing processes (find the new processes)
$processesDiff = Compare-Object -ReferenceObject $processesBefore -DifferenceObject $processesAfter

# get the process ids of new processes
$processIdArray = foreach($process in $processesDiff) {
    $process.InputObject.Split(' ')[-1]
}

# get the msedge process
$p = Get-Process -id $processIdArray | where name -eq msedge

# source of howto maximize a window: https://community.spiceworks.com/topic/664020-maximize-an-open-window-with-powershell-win7
Add-Type '[DllImport("user32.dll")] public static extern bool ShowWindowAsync (IntPtr hwnd, int nCmdShow);' -Name Win32ShowWindowAsync -Namespace Win32Functions

# first minimize the window so it can be maximized
$null = [Win32Functions.Win32ShowWindowAsync]::ShowWindowAsync($p.MainWindowHandle, 6)

# lastly maximize the window
$null = [Win32Functions.Win32ShowWindowAsync]::ShowWindowAsync($p.MainWindowHandle, 3)

# navigate to web page and do stuff
$EdgeDriver.Navigate().GoToUrl('https://example.org')
于 2021-09-16T16:09:41.830 に答える