我想双击一个元素,因此有以下代码 -
Actions builder=new Actions(driver);
builder.doubleClick(visibleElement).perform();
但双击后,结果是——
org.openqa.selenium.WebDriverException: unknown error: failed to parse value of getElementRegion
我用谷歌搜索了很多,但不明白是什么原因以及如何解决这个问题。你能帮忙吗?
此错误消息...
org.openqa.selenium.WebDriverException: unknown error: failed to parse value of getElementRegion
。意味着GetElementRegion()
方法无法分析该值。
深入探讨
此错误来自 element_util.cc:
Status GetElementRegion(
Session* session,
WebView* web_view,
const std::string& element_id,
WebRect* rect) {
Status status = CheckElement(element_id);
if (status.IsError())
return status;
base::ListValue args;
args.Append(CreateElement(element_id));
std::unique_ptr<base::Value> result;
status = web_view->CallFunction(
session->GetCurrentFrameId(), kGetElementRegionScript, args, &result);
if (status.IsError())
return status;
if (!ParseFromValue(result.get(), rect)) {
return Status(kUnknownError,
"failed to parse value of getElementRegion");
}
return Status(kOk);
}
原因和解决方案
此错误可能有多种原因和解决方案,如下所示:
- 确保visibleElement的定位器策略在 DOM 树中唯一标识元素
诱导WebDriver在调用
doubleClick()
之前等待elementToBeClickable()
,如下所示:new Actions(driver).doubleClick(new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(visibleElement))).perform();
添加
build()
步骤:new Actions(driver).doubleClick(new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(visibleElement))).build().perform();
在尝试从操作类调用
doubleClick()
之前,请确保Selenium的焦点位于正确的框架中,即顶级视图或<iframe>
元素。
在这里,您可以找到有关在 iframe 下处理 #document 的方法的相关讨论
- 确保元素不在任何 #shadow 根或影子 dom 中。
在这里你可以找到一个相关的讨论 如何使用硒自动化影子 DOM 元素?