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

是否可以直接使用WebDriver捕获网络元素的屏幕截图?

夏兴生
2023-03-14
问题内容

在Interface
TakesScreenshot
页面上,我发现了这一点:

捕获屏幕截图并将其存储在指定位置。对于扩展了TakesScreenshot的WebDriver,这将根据浏览器尽最大努力按优先顺序返回以下内容:-整个页面-
当前窗口-当前帧的可见部分-包含浏览器的整个显示器的屏幕截图

对于扩展TakesScreenshot的WebElement,这将尽最大努力,具体取决于浏览器,以按首选项顺序返回以下内容:-HTML元素的整个内容-
HTML元素的可见部分。

因此,我想知道它是否应该支持Web元素的捕获屏幕截图,但是目前找不到与此支持有关的任何文档。不知道它是否真的支持。

有人知道更多细节吗?谢谢。


问题答案:

该文件将表明它 支持的,但在实践中,这是行不通的(至少不支持.Net绑定):

var screenshotTaker = element as ITakesScreenshot;
var image = screenshotTaker.GetScreenshot();
image.SaveAsFile(fileName, ImageFormat.Jpeg); // << null exception thrown here

有一个对我有效的解决方法-在页面上执行javascript以获取元素的位置:

const string javascript = "return arguments[0].getBoundingClientRect()";
var obj = (Dictionary<string, object>)((IJavaScriptExecutor)_core.Driver).ExecuteScript(javascript, element);
var rect = new Rectangle((int)double.Parse(obj["left"].ToString()),
                         (int)double.Parse(obj["top"].ToString()),
                         (int)double.Parse(obj["width"].ToString()),
                         (int)double.Parse(obj["height"].ToString()));

这将为您提供元素在视口中的位置,此时您可以截取整个页面的屏幕截图,并将其裁剪到元素的边界。

希望有帮助…



 类似资料:
  • 我试图根据用户输入的坐标捕捉区域截图。基本上,用户在屏幕上点击得到x,y坐标,然后在其他地方点击另一对x,y坐标,然后将其放入一个矩形中,并使用机器人库创建屏幕截图。 我有的问题是,我得到了随机截图,这不是用户输入的坐标,我怎么能考虑包括0的坐标,因为矩形值必须超过1。 以下是我迄今为止的代码:

  • 问题内容: 目前,我正在尝试使用Selenium WebDriver捕获屏幕截图。但是我只能获取整个页面的屏幕截图。但是,我想要的只是捕获页面的一部分,或者仅捕获基于ID或任何特定元素定位符的特定元素。(例如,我希望捕获图像ID =“ Butterfly”的图片) 有什么方法可以按选定的项目或元素捕获屏幕截图? 问题答案: 我们可以通过裁剪整个页面截图来获得元素截图,如下所示:

  • 问题内容: 我可以使用Firefox.get_screenshot_as_file(‘2.png’)对整个页面进行屏幕截图,但是当我使用pass.screenshot(‘1.png’)对网络元素进行屏幕截图时,总是会引发以下异常: 问题答案: 之所以会出现此异常,是因为如果没有某些第三方库或您自己的代码来处理硒中的元素,就无法截取它的屏幕快照。 它使用称为PIL的库来执行此操作:

  • 问题内容: 我有3个屏幕,可以说, 登录 忘记密码 帮助画面 默认情况下,启动应用程序时将打开“登录”屏幕。单击“忘记密码”按钮时,将显示“忘记密码”屏幕,并且在单击“帮助”链接时将打开“帮助”屏幕。 我可以通过某种方式直接打开“忘记密码”屏幕,而无需执行使用 XCUITest 单击按钮的过程吗? 我建议与通过adb直接打开View的意图相同的内容。 问题答案: 据我所知,您不能使用XCUITes

  • 问题内容: 我有一个用Java编写的小项目,我需要用C#重写它。 差不多完成了,但是我仍然坚持使用Selenium Webdriver获取element的屏幕截图。我是通过Java用以下方式完成的: 它在Java中完美地工作,但是我不知道如何用C#重写它,因为我不太熟悉它。 有人可以提出一些不错的方法来在C#中实现相同的目的吗? 问题答案: 在这里,我编写了一些代码以使用C#拍摄Element的屏

  • 目前,我正在尝试使用SeleniumWebDriver捕获一个屏幕截图。但我只能获得整个页面的屏幕截图。然而,我想要的只是捕获页面的一部分,或者基于ID或任何特定元素定位器捕获特定元素。(例如,我希望用image id=“Butterfly”捕捉图片) 有没有办法按所选项目或元素捕获屏幕截图?