【问题标题】:WebdriverIO - Take full-page screenshotWebdriverIO - 截取整页截图
【发布时间】:2016-08-31 12:44:54
【问题描述】:

我正在尝试使用 WebdriverIO 截取整个页面的屏幕截图。

我了解到最好的方法是使用WebdriverCSS 来增强我的 WebdriverIO 流。 WebdriverCSS自动截图整个页面??

问题是 WebdriverCSS 不适合我。我认为是因为它还不兼容webdriverio@3.0.x

有什么方法可以让它工作或我可以使用其他解决方案吗?

我的代码:在回调中只产生未定义的值

// Initialize WebdriverCSS for `client` instance
require('webdrivercss').init(driver, {
    // example options
    screenshotRoot: '../../screenshots',
    failedComparisonsRoot: '../../screenshots/diffs',
    misMatchTolerance: 0.05
});

// ...
// driver gets initialized and url opened
// ...

driver.webdrivercss('page', {
  name: 'body',
  elem: 'body'
}, function(err, res) {
  // here the values of err and res are always undefined
})
.saveScreenshot('../../screenshots/webdrivercsstest.png');
// the screenshot works, but it's not full page

!编辑: 这是 Chromium 中的一个已知 BUG,很可能不会修复。详情请见this LINK

【问题讨论】:

  • 嘿@mags!您可能不再对此感兴趣,但我发布了一种工作方式,可以让其他访问该问题的人轻松实现这一目标。
  • 另外澄清一下,该博文和措辞可能有点误导......它不适用于 Selenium 或驱动程序团队(geckodriverchromedriver , etc.) 来实现这样的功能。除了明显的渲染问题,这些问题仍然存在......这是合乎逻辑的,这应该只在高级框架级别(例如:WebdriverIO、Puppeteer)完成。
  • Selenium 是(引用文档)以用户为中心的网络测试框架。添加用户不能做的事情,例如在不滚动的情况下查看整个页面 (duh!) 是团队永远不会做的事情。 Selenium 中的所有内容都是针对此实现的。 (文本是逐字母添加的,因为用户会键入它,总是首先单击第一个元素,就像用户一样,您不能单击您看不到的元素,就像用户一样)。你明白了……

标签: selenium selenium-webdriver automated-tests webdriver-io wdio-v4


【解决方案1】:

这可以通过多种方式完成,但最直接的方式是通过 wdio-screenshot WebdriverIO 插件。

  1. 安装插件:npm install --save-dev wdio-screenshot
  2. wdio.conf.js 文件中启用插件plugings 对象:plugins: { 'wdio-screenshot': {} }
  3. 在您的测试中,添加以下步骤(对于文档(整页截图):browser.saveDocumentScreenshot('<screenShotsPath>/screenshotName.png');

> 整页截图看起来像 this 用于 Instagram 供稿尝试。 (出于显而易见的原因将屏幕截图保留在行内

  • !Note-001:如果您不希望您的屏幕截图看起来像那样,那么我建议您使用一些 waitUntil 来保证您的内容已成功加载并呈现

  • !Note-002: wdio-screenshot 支持 3 种类型的屏幕截图(viewport(标准)、文档(全页面)和元素(以元素为目标))。

【讨论】:

  • 我收到此错误 TypeError: browser.saveDocumentScreenshot is not a function at H:\webdriver\webdriverio-test\test.js:17:16 at process._tickCallback (internal/process/next_tick.js :68:7)
  • 如何检查插件是否加载?
  • 好的,wdio-screenshot 似乎不适用于 webdriverio v5
  • @SergeyL,嗯...是的,这肯定是在webdriverio@4.x.x 上执行的。我会在不久的将来尝试用 v5 的方式更新答案。感谢您指出那个人!
  • @SergeyL 试试 browser.saveScreenshot
【解决方案2】:

@mags :我看到您需要屏幕截图来了解故障点。我想分享我用于屏幕截图的内容。

  1. 像这样将诱惑报告集成到wdio.conf文件中 reporterOptions: { allure: { outputDir: "allure-results" },

  2. 使用npm install @wdio/allure-reporter --save-dev安装 allure

  3. 执行测试套件后,运行此命令以生成诱惑结果 allure generate ./allure-results --clean

  4. 上述命令执行完成后,运行命令allure open

  5. 现在,对于任何失败的测试,allure 还会向您显示捕获的屏幕截图。 请看附上的示例截图

【讨论】:

  • Allure 生成视口屏幕截图。 OP 正在寻找一种方法来捕获整个文档的屏幕截图。无论如何,OP似乎不再对这个问题的命运感兴趣。
  • @Seema Nair, 不需要在 hooks 上写任何东西吗?
【解决方案3】:

在 WebdriverIO v6 中,您可以使用 Puppeteer 截屏。 我在这里回答了https://stackoverflow.com/a/64286853/2475987

干杯!

【讨论】:

【解决方案4】:

您是否尝试过传递更高的 div id 并截屏

browser
    .init()
    .url("https://search.yahoo.com")
    .webdrivercss('startpage',[
            {
                name: 'fullpage',
                elem: '#purple-syc'
            }

编辑:我也可以在做时看到整页屏幕截图

.saveScreenshot('./webdrivercss.png');

使用.scroll('#myElement') 滚动并再次截屏

【讨论】:

  • 您在 Chrome 中获得完整的屏幕截图吗?我正在使用 Chrome 50.0.2661.86(64 位)。我听说有些浏览器会生成完整的屏幕截图,而有些则不会。
  • @mags 是的,我得到了 chrome 的全页屏幕截图,如上所示。 here 是如何使用 chrome,以备不时之需。
  • @mags 我的 chrome 版本 - 50.0.2661.86(64 位)
  • 嗯。我不认为你得到一个完整的页面截图。看起来您只是从发布的图片中获取视口。
  • @mags 将viewportscrolldown 增加到特定位置。
猜你喜欢
  • 1970-01-01
  • 2016-05-26
  • 1970-01-01
  • 1970-01-01
  • 2022-10-14
  • 2021-07-12
  • 2017-06-02
  • 2015-11-27
相关资源
最近更新 更多