返回顶部
首页 > 资讯 > 精选 >selenium drag_and_drop不生效如何解决
  • 778
分享到

selenium drag_and_drop不生效如何解决

2023-07-05 13:07:26 778人浏览 安东尼
摘要

本篇内容主要讲解“selenium drag_and_drop不生效如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“selenium drag_and_dro

本篇内容主要讲解“selenium drag_and_drop不生效如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“selenium drag_and_drop不生效如何解决”吧!

自动化时发现用drag_and_drop模拟拖拽没效果,页面上只能看到元素source闪了一下,但是并没有拖拽到元素target上(推测可能是我用系统页面在拖拽时有个js效果,但是drag_and_drop模拟拖拽的时候执行太快没能触发JS,所以没有把这两个元素拖拽到一起)。

通过不断尝试,终于解决了,这里记录一下,希望其他人遇到类似情况时能有所启发。方法1是我尝试的过程;方法2是我看到的另一种方法,虽然试验了下没效果,但说不定对其他的拖拽场景是有效的。

方法1:分解drag_and_drop动作

源码可以看出drag_and_drop的源码执行了两个操作,既然直接用drag_and_drop不行,那调整下这两个操作或许可行

    def drag_and_drop(self, source, target):        """        Holds down the left mouse button on the source element,           then moves to the target element and releases the mouse button.        :Args:         - source: The element to mouse down.         - target: The element to mouse up.        """        self.click_and_hold(source)        self.release(target)        return self

drag_and_drop里有两个动作:click_and_hold(在source元素上单击鼠标不松开),release(在target元素上释放点击状态的鼠标)。中间加一个鼠标移动的动作是否可行呢?

我把拖拽的流程改成了:

        ActionChains(self.driver).click_and_hold(source).perfORM()               ActionChains(self.driver).move_by_offset(x, y).perform()        ActionChains(self.driver).release(target).perform()

试验了一下,在执行move_by_offset动作的时候能触发JS的效果,只不过位移的xy不准确,触发不了另一个JS,只要计算好要偏移的位置就好了

最终的实现:

    def drag_and_drop(self):        source = self.find_element_and_scroll_into_view(source_loc)        target = self.find_element_and_scroll_into_view(target_loc)        # 先移动一点 触发js效果 触发后元素变小 重新获取元素以便能准确计算鼠标偏移量        ActionChains(self.driver).click_and_hold(source).move_by_offset(5, 0).perform()        drag_source = self.find_element(change_source_loc)         x1, x2 = (drag_source.location.get("x"), drag_source.location.get("x") + drag_source.size.get("width"))        y1, y2 = (drag_source.location.get("y"), drag_source.location.get("y") + drag_source.size.get("height"))        source_middle_x = (x1 + x2) / 2        source_middle_y = (y1 + y2) / 2        x3, x4 = (target.location.get("x"), target.location.get("x") + target.size.get("width"))        y3, y4 = (target.location.get("y") + 0.5 * target.size.get("height"), target.location.get("y") + target.size.get("height"))        target_middle_x = (x3 + x4) / 2        target_middle_y = (y3 + y4) / 2        x = target_middle_x - source_middle_x        y = target_middle_y - source_middle_y         ActionChains(self.driver).move_by_offset(x, y).perform()        ActionChains(self.driver).release(target).perform()

 拖拽效果:

selenium drag_and_drop不生效如何解决

 方法2:使用seletools解决

虽然我试了下没效果,但是感觉是有用的,这里一并记录下。

selenium的drag_and_drop方法在某些场景下无效,这是官方很久就已经知道的BUG,只不过没有在源码中修复,而是提供了单独的包,因为David Burnes(核心 Selenium 提交者)认为拖放错误是一个WEBdriver网络驱动问题,在Selenium中提供任何暂时避开网络的方法并不是一个好主意。

安装

pip install seletools

使用

from seletools.actions import drag_and_drop source = driver.find_element(xxx)target = driver.find_element(xxx)drag_and_drop(driver, source, target)

到此,相信大家对“selenium drag_and_drop不生效如何解决”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: selenium drag_and_drop不生效如何解决

本文链接: https://lsjlt.com/news/352066.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • selenium drag_and_drop不生效如何解决
    本篇内容主要讲解“selenium drag_and_drop不生效如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“selenium drag_and_dro...
    99+
    2023-07-05
  • selenium drag_and_drop不生效的解决办法
    目录方法1:分解drag_and_drop动作 方法2:使用seletools解决做自动化时发现用drag_and_drop模拟拖拽没效果,页面上只能看到元素so...
    99+
    2023-03-19
    selenium drag_and_drop不生效 selenium drag_and_drop
  • 改css不生效如何解决
    这篇“改css不生效如何解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“改css不生效如何解决”文章吧。改css不生效的解...
    99+
    2023-07-05
  • react+maxlength不生效如何解决
    本篇内容介绍了“react+maxlength不生效如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!react+maxlength不生...
    99+
    2023-07-04
  • mysql my.ini不生效如何解决
    本篇内容主要讲解“mysql my.ini不生效如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql my.ini不生...
    99+
    2023-02-14
    mysql my.ini
  • linux php.ini不生效如何解决
    本篇内容主要讲解“linux php.ini不生效如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux php.ini不生效如何解决”吧!linux php.ini不生效的解决办法:...
    99+
    2023-07-04
  • php error log 不生效如何解决
    本篇内容介绍了“php error log 不生效如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php error log不生效的解...
    99+
    2023-06-20
  • quartz配置不生效如何解决
    要解决Quartz配置不生效的问题,您可以按照以下步骤操作:1. 确保在您的项目中正确地配置了Quartz。首先,检查您的pom.x...
    99+
    2023-09-13
    quartz
  • react中modal不生效如何解决
    这篇文章主要讲解了“react中modal不生效如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“react中modal不生效如何解决”吧!react中modal不生效的解决办法:1、将...
    99+
    2023-07-04
  • css样式不生效如何解决
    1. 检查样式表的路径是否正确:请确保样式表文件的路径是正确的,可以使用相对路径或绝对路径。2. 检查样式表是否被正确引用:请确保在...
    99+
    2023-05-25
    css样式不生效 css
  • php curl exec不生效如何解决
    这篇文章主要介绍“php curl exec不生效如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“php curl exec不生效如何解决”文章能帮助大家解决问题。php curl exec不...
    99+
    2023-07-04
  • linux改hosts不生效如何解决
    这篇文章主要讲解了“linux改hosts不生效如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux改hosts不生效如何解决”吧!linux改hosts不生效的解决办法:1、找...
    99+
    2023-07-05
  • idea中autowired注解不生效如何解决
    当使用@Autowired注解时,如果发现注入不生效,可以尝试以下几种解决方案:1. 确保被注入的对象被正确声明为一个Bean。在被...
    99+
    2023-09-27
    idea
  • 如何解决mac php不生效问题
    本文操作环境:MAC OS X 10.9.1系统,PHP5版,MacBook Air 2019电脑。如何解决mac php不生效问题Mac环境变量不生效的问题(将php添加到环境变量)。Mac环境变量不生效,关键在于bash和zsh举例:将...
    99+
    2015-07-07
    mac php
  • 如何解决PHP opcache 不生效问题
    本文操作环境:Windows7系统,PHP7.4版,Dell G3电脑。如何解决PHP opcache 不生效问题Opcache修改配置不生效的历程:在安装Nextcloud的时候总是遇到一个非常棘手的问题: 官方要求opcache.max...
    99+
    2018-08-26
    PHP opcache
  • 如何解决@NotBlank不生效的问题
    解决@NotBlank不生效 在项目开发中,发现一个类中包含有另外一个类,这种包含关系的类上的@NotBlank校验不生效,后来发现需要在内部的类的域上加上@Valid注解,如下: ...
    99+
    2024-04-02
  • plsql配置oci不生效如何解决
    要解决PL/SQL配置OCI不生效的问题,可以尝试以下几个步骤:1. 确认你的环境是否正确配置了OCI。要使用OCI,需要确保你的O...
    99+
    2023-09-26
    plsql
  • tomcat修改server不生效如何解决
    如果修改了Tomcat的server.xml文件,但修改不生效,可能是由于以下原因:1. 未重启Tomcat:在修改server.x...
    99+
    2023-09-23
    tomcat
  • oracle触发器不生效如何解决
    如果Oracle触发器没有生效,可能有以下几个原因和解决方法:1. 触发器没有启用:确保触发器是启用状态。可以使用以下语句检查触发器...
    99+
    2023-09-29
    oracle
  • linux安装zlib不生效如何解决
    Linux上安装zlib时可能会遇到不生效的问题,解决方法如下:1. 确保已正确安装zlib库。可以使用以下命令来安装zlib库:-...
    99+
    2023-09-17
    linux zlib
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作