You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium Chrome/Edge报MoveTargetOutOfBoundsException且下拉文本为空

Java Selenium Chrome/Edge 版本兼容性问题处理方案

问题背景

使用Java Selenium做自动化测试,实现点击悬停按钮弹出的下拉菜单内的链接逻辑时,相同代码在geckodriver 94版本下运行完全正常,可正常悬停、读取文本、点击选项,但在Chrome 95/96、Edge 95版本下出现两类异常,且已确认所有元素定位器正确。

异常1:悬停按钮抛出坐标越界错误

执行a.moveToElement(button).build().perform()悬停按钮时抛出org.openqa.selenium.interactions.MoveTargetOutOfBoundsException: move target out of bounds异常,手动访问页面时按钮完全在视口内,可正常操作。
对应悬停逻辑代码:

private void hoverButtonWaitDropDown(WebElement button) {
        a.moveToElement(button).build().perform();
        try {
            w.until(ExpectedConditions.visibilityOf(dropDownMenu));
        } catch (TimeoutException ex) {
            ExtentTestManager.log(logger, Level.WARN, "Dropdown menu failed to display");
        }
    }

异常2:下拉选项getText()返回空字符串

注释掉悬停代码,手动触发下拉菜单后,测试触发Assert.fail()终止。经排查dataItems.size()!=0说明可识别下拉选项列表,但遍历下拉项span调用getText()仅返回空字符串,手动在DevTools用选择器div[class='dataitems'] a span可正常匹配到带文本的对应元素。

对应业务代码

点击逻辑

public void clickContextSetting(String setting) {
        hoverButtonWaitDropDown(contextButton);
        if (dataItems.size() == 0) {
            ExtentTestManager.log(logger, Level.WARN, "There are no context settings on the dropdown menu");
            return;
        }
        for (WebElement con : dataItems) {
            if (con.findElement(By.tagName("span")).getText().trim().equalsIgnoreCase(setting)) {
                con.click();
                return;
            }
        }
        Assert.fail("Test aborted because context setting: " + setting + " is not present on the topbar dropdown menu");
    }

文本打印逻辑

private void printDataItems() {
        for (WebElement item: dataItemsText) {
            System.out.println(item.getText());
        }
    }

元素定位器

@FindBy(css = "div[gadget-name='Topbar context btn']")
private WebElement contextButton;

@FindBy(css = "div[class^='dropdata']")
private WebElement dropDownMenu;

@FindBy(css = "div[class='dataitems'] a")
private List<WebElement> dataItems;

@FindBy(css = "div[class='dataitems'] a span")
private List<WebElement> dataItemsText;

根因与解决方案

该问题属于ChromeDriver已知Bug,触发根因为待交互元素的父容器设置了zoom: 90%属性,ChromeDriver 95/96版本计算元素坐标时没有适配非100%的zoom缩放值,导致坐标计算错误。
解决方法:将父容器的zoom属性值调整为100%即可,调整后悬停、文本读取、点击操作均可正常执行。

内容的提问来源于stack exchange,提问作者Mattemingda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 04:36:03