之前讲过一些Selenium 基础操作, 实际测试过程中需要用到截屏功能, 逻辑如下:

  1. 首先找到需要截图的元素
  2. 调用GetScreenshot() 方法转换为Base64编码格式的字符串, 赋值给静态类[OpenQA.Selenium.Screenshot]
  3. 另存为指定路径中的指定文件名

: 测试过程发现一个问题, 需要将浏览器窗口最大化, 否则有可能截图大小不完整

更新注:在实际测试过程中使用任务计划调用脚本, 始终无法跟Powershell ISE 当中的测试保持一致, 问题现象是使用Powershell ISE 可以正常截图, 但是使用任务计划调用脚本截图只能截取一部分, 这时候考虑到可能是任务计划默认打开的浏览器是指定大小的窗口, 根据这个猜测,一直在找方法怎么调整窗口大小来解决该问题,最终的测试了N遍无法更改默认窗口大小, 最后看到目标网页下面有滚动条, 试着把滚动条移动之后, 把想要截图的元素显示到当前显示区域, 再进行截图就可以了, 这也算是一个迂回方案了


ipmo D:\tools\Selenium\WebDriver.Support.dll
ipmo D:\tools\Selenium\WebDriver.dll

$url = 'https://blog.51cto.com/'
$EdgeDriver = New-Object OpenQA.Selenium.Edge.EdgeDriver
$nav = $EdgeDriver.Navigate()
$nav.GoToUrl($url)
$maininfo = $EdgeDriver.FindElement([OpenQA.Selenium.By]::ClassName('main_in'))
$jscmd = "window.scrollTo(1000,0);" # 1000 向左移动滚动条的距离, 0 向下移动的距离
$EdgeDriver.ExecuteScript($jscmd) # 执行js 脚本移动滚动条
[OpenQA.Selenium.Screenshot]$screenshot = $maininfo.GetScreenshot() ### Core Code ###
$screenshot_path = "D:\Tools\testscreenshot.png"
$screenshot.SaveAsFile($screenshot_path)