即使滚动到元素后,Selenium MoveTargetOutOfBoundsException

2023-12-02

new Actions(data).moveToElement(element,x,y).perform();

此代码适用于:Selenium 3.8.1、Chrome 63、chromedriver 2.3.8

最终升级到:Selenium 3.14、Chrome 75、chromedriver 75.0.3770.9

我收到错误:

org.openqa.selenium.interactions.MoveTargetOutOfBoundsException

有人建议我这样做:

随着 Chromedriver 在版本 75 中切换到 w3c 合规性,您现在 在对元素使用操作之前必须将其滚动到视图中

所以我添加了这段代码(isVisibleInViewport来自here)

  private boolean isVisibleInViewport(WebElement element) {
      return (boolean)((JavascriptExecutor)data).executeScript(
            "var elem = arguments[0],                 " +
            "  box = elem.getBoundingClientRect(),    " +
            "  cx = box.left + box.width / 2,         " +
            "  cy = box.top + box.height / 2,         " +
            "  e = document.elementFromPoint(cx, cy); " +
            "for (; e; e = e.parentElement) {         " +
            "  if (e === elem)                        " +
            "    return true;                         " +
            "}                                        " +
            "return false;                            "
            , element);
  }

public void moveToElement(WebElement element, int x,int y){
    if (!isVisibleInViewport(element)) ((JavascriptExecutor) data).executeScript("arguments[0].scrollIntoView();", element);
    new Actions(data).moveToElement(element,x,y).perform();
}

但是我仍然遇到同样的错误:

org.openqa.selenium.interactions.MoveTargetOutOfBoundsException: move target out of bounds
  (Session info: chrome=75.0.3770.100)
Build info: version: '3.14.0', revision: 'aacccce0', time: '2018-08-02T20:19:58.91Z'
System info: host: 'TEST_VIRTUAL_114', ip: '192.168.215.2', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_181'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 75.0.3770.100, chrome: {chromedriverVersion: 75.0.3770.90 (a6dcaf7e3ec6f..., userDataDir: C:\Users\TestVirtualPC\AppData\Lo...}, goog:chromeOptions: {debuggerAddress: localhost:63560}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: XP, platformName: XP, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify}

那么问题出在哪里呢?


我不确定您是否面临同样的问题,但当我将 chromedriver 更新到 version75 时,我也遇到了类似的问题。

在我使用左上角的偏移之前,它对于以前版本的 chromedriver 工作得很好。

但从现在开始(Version75)我必须使用距中心的偏移量的网络元素。

计算网络元素中心的坐标解决了我的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

即使滚动到元素后,Selenium MoveTargetOutOfBoundsException 的相关文章

随机推荐

  • Android:在 webview 中下载在 Oreo 中不起作用,它在 Oreo 设备中强制关闭

    下载管理器代码在 Android 中不起作用WebView适用于 Oreo 设备 但它适用于旧版本 如果不是 Oreo 设备 它会提示 正在下载文件 并被下载 但如果是 Oreo 它会强制关闭 崩溃 下面是我正在使用的代码 片段 webVi
  • 数字后跟大写 L

    什么是512L意思是 或者可能是任何数字后跟大写 L example uint sec然后是一些带有表达式的代码 sec 512L 取出来的XV6代码 mkfs c L代表long 这创建了一个类型的文字long l也可以 但看起来像1 所
  • 连接表上的 where 子句

    对于下表 ROOM ID NAME 1 ROOM 1 2 ROOM 2 房间状态 ID ROOM ID OPEN DATE 1 1 1 2000 01 01 00 00 00 2 2 1 2000 01 01 00 00 00
  • 向现有列添加自动增量,而不影响当前记录值

    我想将列类型更改为AUTO INCREMENT在现有的MyISAM1数据库表 数据库目前有数千条记录 其中列值非常重要 当前值不受影响至关重要 我想从最新的最高值开始递增 我在 phpmyadmin 中尝试了此操作 由 phpmyadmin
  • 编译 SCSS 时出现误报“未定义变量”错误

    使用 ruby compass gem 编译 SCSS 时收到错误消息 run var lib gems 1 8 gems compass 0 12 2 bin compass compile out unchanged sass part
  • 从 python dataframe 列中删除非 json 对象行

    我有一个数据框 该列包含 json 对象和字符串 我想删除不包含 json 对象的行 下面是我的数据框的样子 import pandas as pd df pd DataFrame A hello world a 5 b 6 c 8 usa
  • 仅支持横向界面方向

    我有使用横向右方向的应用程序 在视图控制器中我使用 BOOL shouldAutorotateToInterfaceOrientation UIInterfaceOrientation interfaceOrientation Return
  • 系统 python 版本处于活动状态,而不是本地 pyenv 版本

    激活虚拟环境后如何检查使用的python版本是否正确 我尝试了which python3和which python 但两个输出都指示系统python版本而不是本地pyenv版本 它仍在使用我的本地版本还是我的安装有问题 这是命令行输出 Do
  • 如何根据 ViewModel 属性值添加淡入/淡出动画?

    我有一个视图模型它公开了字符串属性页面工具栏可见这可以是true or false private string pageToolBarVisible public string PageToolBarVisible get return
  • 有什么方法可以修改 JavaScript 中的“this”吗?

    我找到了这个答案 如何在javascript中修改 this 但我不喜欢它 肯定有办法somehow modify this 这是一个例子 function var a function v v 10 a function console
  • 标题栏颜色变化问题

    我想动态更改标题栏的颜色 即 有人单击按钮 它会更改颜色 但是 我似乎无法让它填满整个标题栏 这种情况在模拟器和 Nexus One 上都会发生 有任何想法吗
  • 在 Spark 中提取 hive 表分区 - java

    Spark 有没有办法只提取分区列名称 我使用的解决方法是运行 show extended table like table name using HiveContext 你可以使用类HiveMetaStore客户端直接查询HiveMeta
  • Pandas:对 NaN 值进行“或”运算

    我有一个包含 3 列的 DataFrame 每列的值为NaN 我想根据这 3 列填充第四列 这样or操作应用于列 如果第一个不是NaN 取其值 否则检查第二个 依此类推 自从一个NaN值不是一个False the or运算符不能按原样使用
  • 如何检测区域上方和下方的点?

    我有这个图像 其中红点是划分该阿拉伯语词段的不同字母的坐标 我想检测点之间区域上方或下方的点 点是 从左到右 81 183 80 217 83 275 83 314 现在字母上方有一个点 81 183 and 80 217 同样 上面的部分
  • 输入要读取的自定义文件名?

    我想允许用户键入要读取 写入的任何 txt 文件的名称 这是我的代码 printf Enter txt file name n scanf s fname FILE inputf inputf fopen fname w 问题是此方法不起作
  • 如何使用线程实现缓动函数

    我试图找到一种有效 正常或简单的方法来在我的 java 程序中实现缓动函数 我让缓动功能可以工作 但我觉得有一种更有效的方法来做到这一点 我看不到的 可能是因为视野狭隘 这是我的代码 有人可以告诉我应该采取哪些不同的做法 或者指出我需要研究
  • 作为系统运行的 Windows 服务无法访问 C:\users\

    我已将 Windows 服务安装为本地系统帐户 有时它会在计算机上构建目录列表 它在 Windows 7 的 c users 目录下失败 我检查了这些文件夹 它们似乎处于系统帐户的完全控制之下 为什么我无法访问这些目录 System Una
  • 在Python中查询连接的USB设备信息的简单方法?

    如何在Python中查询已连接的USB设备信息 我想获取 UID 设备名称 例如 SonyEricsson W660 设备路径 例如 dev ttyACM0 另外 无论何时再次连接设备 上述信息中用于识别设备的最佳参数是什么 UID 我正在
  • 如何增加 Node.js 中的最大调用堆栈大小

    这与有关 Node 中错误消息的其他问题不同 RangeError 超出最大调用堆栈大小因为我确切地知道为什么会收到此错误消息 发生这种情况是因为我正在递归 实际上递归了很多次 Thanks From node help node max
  • 即使滚动到元素后,Selenium MoveTargetOutOfBoundsException

    new Actions data moveToElement element x y perform 此代码适用于 Selenium 3 8 1 Chrome 63 chromedriver 2 3 8 最终升级到 Selenium 3 1