让 powershell 进入 ie 类,并在 ui 测试期间截取 ie 窗口的屏幕截图

Posted

技术标签:

【中文标题】让 powershell 进入 ie 类,并在 ui 测试期间截取 ie 窗口的屏幕截图【英文标题】:getting powershell to class ie and during a ui test take a screenshot of the ie window 【发布时间】:2011-07-15 14:24:00 【问题描述】:

所以我正在使用 power shell 运行 ui 测试。

当我遇到错误时,我想只截取 ie 窗口的屏幕截图,这可以通过 alt print scrn 完成

%prtsc

但它只需要活动窗口的 jpg。

我试过这个 $h = (Get-Process iexplore).MainWindowHandle SetForegroundWindow((Get-Process -name iexplore).MainWindowHandle) 睡眠-秒 2 $h = (Get-Process -id $pid).Ma​​inWindowHandle

另外,任何有关识别错误的方法的帮助都将非常感谢。

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)
    

【问题讨论】:

【参考方案1】:

设置活动窗口

您需要做一些不同的事情。首先,您需要这样设置活动窗口:

How to set foreground Window from Powershell event subscriber action

获取正确的窗口

接下来,您需要处理 IE 产生至少两个进程的事实。所以你需要抓住正确的窗口。

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

截图

现在您可以通过以下两种方式之一来截取屏幕截图。

    像 JPBlanc 向您展示的那样发送 PrtSc。

    Add-Type -Assembly System.Windows.Forms
    Start-Sleep -seconds 1
    
    ## Capture the current window 
    [System.Windows.Forms.Sendkeys]::SendWait("%PrtSc")
    

    Take-Screenshot script from PoschCode

【讨论】:

【参考方案2】:

您是否注意捕获没有 % 的整个屏幕:

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")

【讨论】:

我希望有一种方法可以将脚本设置为仅捕获 IE 窗口。如果有办法让 IE 窗口成为可以工作的“当前”窗口

以上是关于让 powershell 进入 ie 类,并在 ui 测试期间截取 ie 窗口的屏幕截图的主要内容,如果未能解决你的问题,请参考以下文章

PowerShell IE9 ComObject 在导航到网页后具有所有空属性

让shell解析或做你自己的解析(powershell / cmd)

您如何获得使用翻译 API 并在每次启动到服务器时都需要 Powershell 命令的 Discord 机器人?

powershell 实现自动IE代理设置

Powershell操作IE实现网站登录

placeholder怎样用IE和谷歌上显示统一内容