首页 > 编程语言 >《最新出炉》系列初窥篇-Python+Playwright自动化测试-64 - Canvas和SVG元素推拽

《最新出炉》系列初窥篇-Python+Playwright自动化测试-64 - Canvas和SVG元素推拽

时间:2024-08-06 08:56:38浏览次数:13  
标签:Canvas Playwright const Python svg canvasInfo ctx canvas 拖拽

1.简介

今天宏哥分享的在实际测试工作中很少遇到,比较生僻,如果突然遇到我们可能会脑大、懵逼,一时之间不知道怎么办?所以宏哥这里提供一种思路供大家学习和参考。

2.SVG简介

svg也是html5新增的一个标签,它跟canvas很相似。都可以实现绘图、动画。但是svg绘制出来的都是矢量图,不像canvas是以像素为单位的,放大会模糊。svg绘制出来的图是不会的。SVG英文全称为Scalable vector Graphics,意思为可缩放的矢量图,这种元素比较特殊,需要通过 ​name​() 函数来进行定位。

3.SVG元素拖拽

3.1svg拖拽demo

1.svg下的circle元素是可以拖动的,宏哥网上找了半天没有找到,然后自己动手写一个demo用于演示(可以看到circle的cx和cy在拖拽的过程中不断的发生变化),如下图所示:

 2.demo的参考代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>北京-宏哥</title>
  <style>
      svg {
            margin-left: 100px;
            margin-top: 100px;
            border: 1px solid black
        }
       
    </style>
</head>
<body>
    <svg width="500" height="300" id="svg-container">
        <circle cx="100" cy="100" r="20" fill="blue" id="draggable-circle"></circle>
    </svg>
</body>
    <script>
        // 获取SVG容器和可拖拽元素
        const svgContainer = document.getElementById('svg-container');
        const draggableElement = document.getElementById('draggable-circle');
         
        let isDragging = false;
        let startX, startY;
         
        // 鼠标按下事件处理程序
        function dragStart(event) {
          isDragging = true;
          startX = event.clientX - parseInt(draggableElement.getAttribute('cx')),
          startY = event.clientY - parseInt(draggableElement.getAttribute('cy'));
          // 阻止默认的拖拽行为
          event.preventDefault();
        }
         
        // 鼠标移动事件处理程序
        function drag(event) {
          if (isDragging) {
            const dx = event.clientX - startX;
            const dy = event.clientY - startY;
            draggableElement.setAttribute('cx', dx);
            draggableElement.setAttribute('cy', dy);
          }
        }
         
        // 鼠标抬起事件处理程序
        function dragEnd(event) {
          isDragging = false;
        }
         
        // 添加事件监听器
        draggableElement.addEventListener('mousedown', dragStart);
        svgContainer.addEventListener('mousemove', drag);
        svgContainer.addEventListener('mouseup', dragEnd);
    </script>
</html>

3.接下来我们用上边的svg的demo来演示拖拽,其实在我们上一篇中掌握如何定位svg元素后,拖拽就非常简单了,无非就是一些鼠标的操作事件罢了。

3.2代码设计

3.3参考代码

# coding=utf-8

标签:Canvas,Playwright,const,Python,svg,canvasInfo,ctx,canvas,拖拽
From: https://www.cnblogs.com/du-hong/p/18177694

相关文章

  • 无法写入使用 pygbag 编译的 python/pygame 程序中的文本文件
    我有一个python/pygame程序,它从与该程序位于同一目录中的测试文件中读取数据。在程序结束时,应该将文本写回测试文件。这在Python环境中运行程序时有效,但在使用Pygbag编译并在浏览器中运行时无效。程序(称为main,py)是:importasyncioimportosimportpygamepyg......
  • Python 中的克隆和明显的指针问题
    我在克隆列表时遇到了困难。我已经尝试了我所知道的一切,但我的代码似乎仍然将errGrid、slopes1、slopes2和lopes视为同一个对象。为什么?!errOrder=[[]foriinrange(6)]errMethod=[errOrder.copy()foriinrange(AM)]errGrid=[errMethod.copy()foriinrange(U......
  • 【香橙派系列教程】(七)香橙派下的Python3安装
    【七】香橙派下的Python3安装为接下来的Linux图像识别智能垃圾桶做准备。图像处理使用京东SDK只支持pyhton和Java接口,目的是引入C语言的Python调用,感受大厂做的算法bug此接口是人工智能接口,京东识别模型是通过训练后的模型,精准度取决于训练程度,人工智能范畴在常规嵌入式......
  • vnpy,一个不可思议的Python库!
    vn.py是一个开源的Python交易编程框架,旨在帮助程序员快速搭建属于自己的量化交易平台。该框架支持股票、期货、外汇等多种金融产品的交易,提供了从数据获取、策略开发到交易执行的全流程支持。如何安装vnpy首先,要使用vnpy,您需要通过Python的包管理工具pip来安装它。以下......
  • Python回溯算法
    回溯算法回溯算法是一种系统的搜索算法,用于解决诸如排列组合、子集生成、图的路径、棋盘问题等问题。其核心思想是通过递归尝试各种可能的解决方案,遇到不满足条件的解时则回退(回溯),继续尝试其他可能性,直到找到所有的解决方案或确认无解。主要步骤:选择路径:在当前步骤选择一个可......
  • [python]使用gunivorn部署fastapi服务
    前言Gunicorn是一种流行的WSGIHTTP服务器,常用于部署Django和Flask等PythonWeb框架程序。Gunicorn具有轻量级、高稳定性和高性能等特性,可以轻易提高PythonWSGIApp运行时的性能。基本原理Gunicorn采用了pre-fork模型,也就是一个工作进程和多个worker进程的工作模式。在这个模......
  • python十六进制编辑器
    源代码:importtkinterastkfromtkinterimportfiledialogimportstructimportbinasciiimportosclassHexEditor:def__init__(self,master):self.master=masterself.master.title("十六进制编辑器")self.master.configure(bg......
  • python项目学习 mediapipe手势识别 opencv可视化显示
    importcv2importmediapipeimportnumpydefget_angle(vector1,vector2):#角度计算angle=numpy.dot(vector1,vector2)/(numpy.sqrt(numpy.sum(vector1*vector1))*numpy.sqrt(numpy.sum(vector2*vector2)))#cos(angle)=向量的点乘/向量的模angle=nump......
  • 【优秀python大屏】基于python flask的广州历史天气数据应用与可视化大屏
    摘要气象数据分析在各行各业中扮演着重要的角色,尤其对于农业、航空、海洋、军事、资源环境等领域。在这些领域中,准确的气象数据可以对预测未来的自然环境变化和采取行动来减轻负面影响的决策起到至关重要的作用。本系统基于PythonFlask框架,通过对气象数据的分析和处理来提供......
  • Python-MNE全套教程(官网翻译)-入门01:概述篇
    目的以牺牲深度为代价进行入门学习,简易学习基本方法开始导入相关库:#License:BSD-3-Clause#CopyrighttheMNE-Pythoncontributors.importnumpyasnpimportmne加载数据MNE-Python数据结构式基于fif格式的,但是对于其他格式也有阅读方法,如https://mne.tools/s......