当前位置: 首页 > 面试题库 >

如何截屏移动设备的整个高度?

庄萧迟
2023-03-14
问题内容

在测试移动设备尺寸时,Chrome只会截取可见窗口的屏幕截图。我认为这是标准行为和预期行为。但是,我还想捕获页面的整个滚动高度,以便检查整个页面的呈现。

我认为最简单的解决方案是将Chrome窗口高度设置为足够大的值,然后完成工作。但是,Chrome窗口的高度似乎受我的物理屏幕高度(即。我使用将它设置为5,000
browser.manage().window().setSize(375,5000);,但它的大小只能调整为1,200的高度。

我已经知道[根据WebDriver规范] [1],[ takeScreenshot()功能] [2] 不应捕获整个页面 ,而应仅对可见区域进行截图。


问题答案:

操作编辑:我选择了最后一个选项,在下面的选项中,我将其标记为“ 工作解决方案!

下面是解决问题的按类型分类的不同策略。

滚动,截屏,追加

在CrossBrowserTesting.com上引用屏幕截图系统的作者:

作为CrossBrowserTesting.com的屏幕截图系统的作者,我可以告诉您,我们能够在浏览器中一致且可靠地获取全屏屏幕截图的唯一方法是
滚动,捕获和追加图像

这里是一个示例工作实现示例,以cnn.com目标示例为例,滚动并获取可见区域的屏幕截图。使用scrollHeightclientHeightscrollTop确定在何处,我们都在一个垂直滚动位置以及如何更向下滚动。由于我们正在循环处理promise,因此必须使用“我们处于最底层”的基本条件来创建递归函数:

var fs = require('fs'),
    Utils = {
        screenShotDirectory: '',

        writeScreenShot: function (data, filename) {
            var stream = fs.createWriteStream(this.screenShotDirectory + filename);

            stream.write(new Buffer(data, 'base64'));
            stream.end();
        },

        getSizes: function () {
            return browser.executeScript("return {scrollHeight: document.body.scrollHeight, clientHeight: document.body.clientHeight, scrollTop: document.body.scrollTop};");
        },

        scrollToBottom: function (height, index) {
            var self = this;

            self.getSizes().then(function (data) {
                // continue only if we are not at the bottom of the page
                if (data.scrollTop + data.clientHeight < data.scrollHeight) {
                    browser.executeScript("window.scrollTo(0, arguments[0]);", height).then(function () {
                        browser.takeScreenshot().then(function (png) {
                            self.writeScreenShot(png, "test" + index + ".png");
                        });
                    });
                    self.scrollToBottom(height + data.clientHeight, index + 1);
                }
            });
        }
    };

describe("Scrolling and saving screenshots", function () {
    beforeEach(function () {
        browser.ignoreSynchronization = true;
        browser.get("http://www.cnn.com/");
    });

    it("should capture an entire page", function () {
        Utils.getSizes().then(function (data) {
            Utils.scrollToBottom(data.clientHeight * 2, 1);
        });
    });
});

它将产生多个test<index>.png图像,然后可以将它们粘合在一起。

要在“单列图像”中合并图像,例如,您可以GraphicsMagick通过gmnodejs模块使用图像处理系统。模式中带有选项的.montage()方法
会有所帮助。样例代码concatenate``1x

var gm = require('gm');

Utils.getSizes().then(function (data) {
    var index = Utils.scrollToBottom(data.clientHeight * 2, 1);

    var op = gm();
    for (var i = 1; i <= index; i++) {
        op = op.in("test" + i + ".png");
    }

    op = op.montage().mode("concatenate").tile("1x");

    op.write('output.png', function (err) {
        if (err) console.log(err);
    });
});

更换浏览器

在Chrome中,您始终只会在结果屏幕截图上看到可见区域,这是相关chromedriver问题,其中包含有关该问题的大量信息以及多种解决方法:

  • ChromeDriver2的屏幕截图不完整

出乎意料的是,它虽然应该在Firefox中也可以工作 -如果可能,请切换到它:

占据整个屏幕的Chrome屏幕截图与Firefox的不同。Firefox将捕获整个屏幕,甚至包括当前不可见的部分屏幕。Chrome不会!

调整屏幕尺寸

另一个选择是使用诸如的服务,BrowserStackSauceLabs在特定的浏览器中的特定平台上启动测试,并使用
足够大特定分辨率 。量角器支持Sauce LabsBrowserStack开箱即用。

BrowserStack的示例配置:

exports.config: {
  browserstackUser: "user",
  browserstackKey: "key",

  capabilities: {
    'browserstack.local': true,
    'browserstack.debug': true,

    browserName: "Chrome",
    os: "Windows",
    os_version: "8",
    resolution: "2048x1536"
  },
}

然后, 最大化浏览器窗口onPrepare()例如inside ):

browser.driver.manage().window().maximize();

并截图。

工作解决方案!!!

另一种选择是在虚拟显示器中运行测试。我将遵循此博客文章并使用Xvfb,当您运行Xvfb服务器时,可以指定分辨率:

/usr/bin/Xvfb :99 -ac -screen 0 2048x6000x24 &

另请参阅以下主题的相关信息:

  • 用量角器和硒进行AngularJS无头端到端测试

您也可以使用允许配置屏幕尺寸的docker-selenium解决方案。



 类似资料:
  • 本文向大家介绍javascript检测移动设备横竖屏,包括了javascript检测移动设备横竖屏的使用技巧和注意事项,需要的朋友参考一下 如何判断 移动设备提供了两个对象,一个属性,一个事件: (1)window.orientation   属于window对象上一个属性;共有三个值 :0为竖屏模式(portrait),90为向左反转变为横屏模式(landscape),-90为向右反转变为横屏模

  • 我有一个div的背景图像看起来在桌面上非常好。但是当我切换到mobile时,图像从上到下被拉伸,在内容和轮播本身之间产生了很大的空间,而轮播本身都在div中。 下面是滑动器代码: 注我将高度设置为固定的550px,我知道这是问题所在。我的问题是如何使高度的东西,而在移动,使它可以看起来一样,在桌面。 下面是我正在使用的特定轮播的javascript: 这里的截图向你展示了我的网站上正在发生的事情。

  • 问题内容: 请看下面的代码。我只发布代码的重要部分。 activity_game.xml Game.java OnSwipTouchListener.java 注意-我不拥有此类代码。它由另一位SO成员编写。 现在,我正在尝试使“整个活动”处于启用状态。请查看以了解我的操作方式。但是问题是,它对任何触摸事件都没有反应!代码没有错,因为我通过将侦听器设置为来使用了touch事件。 我试图使整个活动处

  • 为了更好地为移动设备服务,HTML 5推出了一系列针对移动设备的API。 Viewport Geolocation API getCurrentPosition方法 watchPosition方法和clearWatch方法 Vibration API Luminosity API Orientation API 参考链接 Viewport Viewport指的是网页的显示区域,也就是不借助滚动条的

  •        在“操作”菜单栏中点击高清出图,弹出对话框如下。设置图片大小是几倍窗口大小,设置好图片输出路径,点击确定输出图片。

  •        在“操作”菜单栏中点击高清出图,弹出对话框如下。设置图片大小是几倍窗口大小,设置好图片输出路径,点击确定输出图片。