получение powershell для класса ie и во время теста пользовательского интерфейса сделайте скриншот окна ie - PullRequest
1 голос
/ 15 июля 2011

Итак, я провожу тест пользовательского интерфейса с Power Shell.

Когда я получаю сообщение об ошибке, я хочу сделать снимок экрана только из окна ie, это можно сделать с помощью alt print scrn

% {PrtSc}

но требуется только jpg активного окна.

Я попробовал это
$ h = (Get-Process iexplore) .MainWindowHandle SetForegroundWindow ((Get-Process -name iexplore) .MainWindowHandle) сон-сек 2 $ h = (Get-Process -id $ pid) .MainWindowHandle

Кроме того, любая помощь в способе идентификации, т. Е. Ошибки, была бы большой благодарностью.

function screenshot
{
    param(    
    [Switch]$OfWindow        
    )
    begin {
        Add-Type -AssemblyName System.Drawing
        $jpegCodec = [Drawing.Imaging.ImageCodecInfo]::GetImageEncoders() | 
            Where-Object { $_.FormatDescription -eq "JPEG" }
    }
    process {
        Start-Sleep -Milliseconds 250
        if ($OfWindow) { 
        [Windows.Forms.Sendkeys]::SendWait("%{PrtSc}")        
        } else {
            [Windows.Forms.Sendkeys]::SendWait("{PrtSc}")        
        }

        Start-Sleep -Milliseconds 250
        $bitmap = [Windows.Forms.Clipboard]::GetImage()    
        $ep = New-Object Drawing.Imaging.EncoderParameters  
        $ep.Param[0] = New-Object Drawing.Imaging.EncoderParameter ([System.Drawing.Imaging.Encoder]::Quality, [long]100)  
        $screenCapturePathBase = "$pwd\ScreenCapture"
        $c = 0
        while (Test-Path "${screenCapturePathBase}${c}.jpg") {
            $c++}

        $bitmap.Save("${screenCapturePathBase}${c}.jpg", $jpegCodec, $ep)
    }
}

Ответы [ 2 ]

2 голосов
/ 18 августа 2011

Настройка активного окна

Есть пара вещей, которые нужно сделать по-другому.Во-первых, вам нужно установить активное окно следующим образом:

Как установить окно переднего плана из действия подписчика события Powershell

Получение правильного окна

Далее необходимо учитывать тот факт, что IE порождает как минимум два процесса.Поэтому вам нужно захватить правое окно.

$h = Get-Process | Where-Object {$_.MainWindowTitle -like "My website*"} | Select-Object -ExpandProperty MainWindowHandle

Снимок экрана

Теперь вы можете сделать снимок экрана одним из двух способов.

  1. Отправьте PrtSc, как показал JPBlanc.

    Add-Type -Assembly System.Windows.Forms
    Start-Sleep -seconds 1
    
    ## Capture the current window 
    [System.Windows.Forms.Sendkeys]::SendWait("%{PrtSc}")
    
  2. Скрипт Take-Screenshot из PoschCode

2 голосов
/ 17 июля 2011

Заботитесь ли вы о том, чтобы захватить весь экран без%:

Add-Type -Assembly System.Windows.Forms
Start-Sleep -seconds 1

## Capture the entire screen 
[System.Windows.Forms.Sendkeys]::SendWait("{PrtSc}") 

## Capture the current window 
[System.Windows.Forms.Sendkeys]::SendWait("%{PrtSc}")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...