selenium元素定位截图

作为测试工作者,我们在做ui自动化时可能会遇到需要对页面进行截图的情况。但是大部分都是全屏截图,今天学到了一个模块可以进行对某元素截图,想来以后可能会用到或者大家会用到像记录下来分享给大家。
下边是代码,我在代码后边做了下注释。仅为一个demo,所以可能不规范。见谅。

(1) 代码

from selenium import webdriver
from time import sleep
from PIL import Image

def ele_coor(ele):   #定义了一个方法,此方法的作用是传入一个元素,返回此元素左上角和右下角的坐标
    elem_posi = ele.location   #将元素左上角的位置赋值给 elem_posi
    elem_size = ele.size       #将元素的大小赋值给elem_size
    right = elem_posi["x"] + elem_size["width"]  # 元素左上角x + 元素宽 = 元素右下角x坐标
    bottom = elem_posi["y"] + elem_size["height"] #元素左上角y + 元素搞 = 元素右下角y坐标
    coor=(elem_posi["x"],elem_posi["y"],right,bottom) #将左上角x,y,右下角x,y 写成一个元组
    return coor   # 将元组返回给调用者

driver = webdriver.Chrome()      #webdriver启动谷歌浏览器
driver.fullscreen_window()       #将浏览器设为全屏
driver.get("http://172.31.205.34:3000/d/F5QuGbZZk/172-31-205-32?orgId=1") #请求网页地址
sleep(2)
driver.save_screenshot('cpu.png')   #截全屏,如果需要的是全屏截图 ,除了driver.close()以外,其余皆不写
im = Image.open('cpu.png')  #打开此图片
ele=driver.find_element_by_id("panel-2")  #定位元素的方法,

sleep(3)
im = im.crop(ele_coor(ele))  #先调用ele_coor方法传入元素,返回一个坐标。将原全屏的图片,截取 ele_coor返回的坐标赋值给im
im.save('cpu.png')  #保存新的图片覆盖原全屏的图
driver.close()  #关闭浏览器

(2) 效果

        <1> 全屏

        <2> 通过元素定位截取后的图片

(3) 注意

        <1> 需要fullscreen_windows()进行全屏显示,否则可能变形。视情况而定

        <2> 定位元素的方法也可以用 其他,如classname 、 text、 xpath等,但是必须唯一能定位到。否则可能截成其他图

        <3> 如果用ele = driver.find_elements_by_class_name("XXXX") 的话 ele将是一个列表 ele_cool(ele)方法内可以用一个循环,然后返回一个列表[(x,y,x,y),(x,y,x,y),(x,y,x,y)]这样的形式。截图时就不能覆盖了

        <4> 这种方法效率可能较低,部分业务可用。所以还需结合场景分析

        <5> 只能截当前屏幕元素所在的图。如果想截任意元素的图。链接:       https://blog.csdn.net/qq_42884600/article/details/96328908

 

完!

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值