我一直在研究现有的Selenium自动化框架,其中有一段代码可以检查元素的宽度和高度。如果它们只有正值,那么它将是可交互的,如单击、双击等。
public boolean isElementInteractable(WebElement element) {
JavascriptExecutor js = (JavascriptExecutor) driver;
String offsetWidth = js.executeScript("return arguments[0].offsetWidth;", element).toString();
String offsetHeight = js.executeScript("return arguments[0].offsetHeight;", element).toString();
if ((Integer.parseInt(offsetWidth) != 0 && Integer.parseInt(offsetHeight) != 0) && element.isDisplayed()) {
return true;
}
return false;
}在我的理解中,每个可见/可交互的元素都有正的高度和宽度。我不明白为什么要写这段代码。
你能确认我的理解是否正确吗?如果没有,请帮助我理解哪些情况是可能的。
发布于 2020-01-09 18:23:17
WebElement必须具有宽度和高度才是难以处理的,但在两种情况下都可以认为它是可见的:它具有正的笔划宽度,或者它们具有具有正大小的子节点/文本节点
来自WebDriver specifications Element displayedness
元素显示算法是一种布尔状态,其中true表示显示元素,false表示不显示元素。要计算元素上的状态,请调用调用(
bot.dom.isShown, null, element)。
来自github中的bot.dom.isShown_ (第437行)
function positiveSize(e) {
var rect = bot.dom.getClientRect(e);
if (rect.height > 0 && rect.width > 0) {
return true;
}
// A vertical or horizontal SVG Path element will report zero width or
// height but is "shown" if it has a positive stroke-width.
if (bot.dom.isElement(e, 'PATH') && (rect.height > 0 || rect.width > 0)) {
var strokeWidth = bot.dom.getEffectiveStyle(e, 'stroke-width');
return !!strokeWidth && (parseInt(strokeWidth, 10) > 0);
}
// Zero-sized elements should still be considered to have positive size
// if they have a child element or text node with positive size, unless
// the element has an 'overflow' style of 'hidden'.
return bot.dom.getEffectiveStyle(e, 'overflow') != 'hidden' &&
goog.array.some(e.childNodes, function(n) {
return n.nodeType == goog.dom.NodeType.TEXT ||
(bot.dom.isElement(n) && positiveSize(n));
});
}https://stackoverflow.com/questions/59661568
复制相似问题