如何在Selenium和Python中获取页面中特定元素的截图?


我们可以获取Selenium页面中特定元素的截图。在执行任何测试用例时,我们可能会遇到特定元素的失败。为了查明特定元素的失败原因,我们会尝试捕获错误所在的截图。

元素错误可能由以下原因造成:

  • 断言未通过。
  • 应用程序和Selenium之间存在同步问题。
  • 存在超时问题。
  • 中途出现警报。
  • 无法使用定位器识别元素。
  • 实际结果和最终结果不匹配。

要捕获截图,可以使用`save_screenshot()`方法。此方法会捕获整个页面的截图。

没有内置方法可以捕获单个元素的截图。为此,我们必须将全页面截图裁剪到特定元素的大小。

语法

driver.save_screenshot('screenshot_t.png')

在参数中,我们必须提供截图文件名以及`.png`扩展名。如果使用其他扩展名,则会抛出警告消息,并且无法查看图像。

截图将保存在程序的同一路径下。

这里我们需要借助Webdriver中的`location`和`size`方法来裁剪图像。为此,我们需要导入PIL图像库。它可能包含在标准库中,也可能不包含。如果不可用,可以使用`pip install Pillow`命令安装。

每个元素都有一个唯一的(x, y)坐标位置。`location`方法给出元素的x和y坐标。

每个元素都有一个由高度和宽度定义的尺寸。这些值通过`size`方法获得,该方法给出元素的高度和宽度。

现在开始裁剪图像。

# to get the axes
ax = location['x'];
ay = location['y'];
width = location['x']+size['width'];
height = location['y']+size['height'];
# to compute the cropped image dimension
cropImage = Image.open('screenshot_t.png')
cropImage = cropImage.crop((int(ax), int(ay), int(width), int(height)))
cropImage.save('cropImage.png')

示例

捕获特定元素截图的代码实现。

from selenium import webdriver
from PIL import Image
#browser exposes an executable file
#Through Selenium test we will invoke the executable file which will then
#invoke actual browser
driver = webdriver.Chrome(executable_path="C:\chromedriver.exe")
# to maximize the browser window
driver.maximize_window()
#get method to launch the URL
driver.get("https://tutorialspoint.com/index.htm")
#to refresh the browser
driver.refresh()
# identifying the element to capture the screenshot
s= driver.find_element_by_xpath("//input[@class='gsc-input']")
# to get the element location
location = s.location
# to get the dimension the element
size = s.size
#to get the screenshot of complete page
driver.save_screenshot("screenshot_tutorialspoint.png")
#to get the x axis
x = location['x']
#to get the y axis
y = location['y']
# to get the length the element
height = location['y']+size['height']
# to get the width the element
width = location['x']+size['width']
# to open the captured image
imgOpen = Image.open("screenshot_tutorialspoint.png")
# to crop the captured image to size of that element
imgOpen = imgOpen.crop((int(x), int(y), int(width), int(height)))
# to save the cropped image
imgOpen.save("screenshot_tutorialspoint.png")
#to close the browser
driver.close()

更新于:2020年7月29日

2K+ 浏览量

启动您的职业生涯

完成课程获得认证

开始学习
广告