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
相关产品推荐
相关产品推荐

