我目前有大量的情况需要验证页面(及其所有元素)是否正确显示。WebElement的isdisplay()
方法似乎是实现这一目的的合理方法,但是我想确切地理解这个方法是如何确定元素是否“显示”的。javadoc对该方法的内部工作方式没有任何了解,而web上的其他信息充其量也是稀疏的。
如果有人能提供这种方法如何工作的详细描述,我将不胜感激。
我相信Selenium可以计算出一个元素是否显示。如果它不起作用,您可以引发bug和/或修复您看到的任何问题并提供补丁。
这就是该方法所做的事情(摘自当前的Selenium源代码):
/**
* Determines whether an element is what a user would call "shown". This means
* that the element is shown in the viewport of the browser, and only has
* height and width greater than 0px, and that its visibility is not "hidden"
* and its display property is not "none".
* Options and Optgroup elements are treated as special cases: they are
* considered shown iff they have a enclosing select element that is shown.
*
* @param {!Element} elem The element to consider.
* @param {boolean=} opt_ignoreOpacity Whether to ignore the element's opacity
* when determining whether it is shown; defaults to false.
* @return {boolean} Whether or not the element is visible.
*/
bot.dom.isShown = function(elem, opt_ignoreOpacity) {
if (!bot.dom.isElement(elem)) {
throw new Error('Argument to isShown must be of type Element');
}
// Option or optgroup is shown iff enclosing select is shown (ignoring the
// select's opacity).
if (bot.dom.isElement(elem, goog.dom.TagName.OPTION) ||
bot.dom.isElement(elem, goog.dom.TagName.OPTGROUP)) {
var select = /**@type {Element}*/ (goog.dom.getAncestor(elem, function(e) {
return bot.dom.isElement(e, goog.dom.TagName.SELECT);
}));
return !!select && bot.dom.isShown(select, /*ignoreOpacity=*/true);
}
// Image map elements are shown if image that uses it is shown, and
// the area of the element is positive.
var imageMap = bot.dom.maybeFindImageMap_(elem);
if (imageMap) {
return !!imageMap.image &&
imageMap.rect.width > 0 && imageMap.rect.height > 0 &&
bot.dom.isShown(imageMap.image, opt_ignoreOpacity);
}
// Any hidden input is not shown.
if (bot.dom.isElement(elem, goog.dom.TagName.INPUT) &&
elem.type.toLowerCase() == 'hidden') {
return false;
}
// Any NOSCRIPT element is not shown.
if (bot.dom.isElement(elem, goog.dom.TagName.NOSCRIPT)) {
return false;
}
// Any element with hidden visibility is not shown.
if (bot.dom.getEffectiveStyle(elem, 'visibility') == 'hidden') {
return false;
}
// Any element with a display style equal to 'none' or that has an ancestor
// with display style equal to 'none' is not shown.
function displayed(e) {
if (bot.dom.getEffectiveStyle(e, 'display') == 'none') {
return false;
}
var parent = bot.dom.getParentElement(e);
return !parent || displayed(parent);
}
if (!displayed(elem)) {
return false;
}
// Any transparent element is not shown.
if (!opt_ignoreOpacity && bot.dom.getOpacity(elem) == 0) {
return false;
}
// Any element with the hidden attribute or has an ancestor with the hidden
// attribute is not shown
function isHidden(e) {
//IE does not support hidden attribute yet
if (goog.userAgent.IE) {
return true;
}
if (e.hasAttribute) {
if (e.hasAttribute('hidden')){
return false;
}
} else {
return true;
}
var parent = bot.dom.getParentElement(e);
return !parent || isHidden(parent);
}
if (!isHidden(elem)) {
return false;
}
// Any element without positive size dimensions is not shown.
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));
});
}
if (!positiveSize(elem)) {
return false;
}
// Elements that are hidden by overflow are not shown.
if (bot.dom.getOverflowState(elem) == bot.dom.OverflowState.HIDDEN) {
return false;
}
不确定它真的需要更多的解释,评论是相当清楚的。让我知道如果你想要任何更多的信息添加。
我正在使用JSP、JSTL和Java servlet创建登录/注册页面,并且在servlet的doPost()方法中使用: 当用户从索引中输入无效的登录凭据时发出警报。jsp。 这是有效的,但我不知道为什么有效;以下是我的问题: > 据我所知,我正在将请求和响应对象转发到索引。但是jsp页面如何处理这些对象呢?它是一堆html,响应对象也会被修改,以便包含索引的所有html代码。jsp? 为什么g
两者都是具有相同签名的实例方法。为什么一个有效,另一个无效?
我正在Scala 3中运行以下代码。x、 据我所知,它应该返回True,因为Int根据Scala文档扩展了AnyVal。 在Java中,下面的代码打印为true,这是可以理解的。
我对下面代码片段中的方法感到困惑。 我的困惑在于以下几行。 什么是张量。view()函数的作用是什么?我在很多地方见过它的用法,但我不明白它是如何解释它的参数的。 如果我将负值作为参数赋给函数,会发生什么情况?例如,如果我调用,? 有人能用一些例子解释一下函数的主要原理吗?
//我在main方法的最后一行获得了一个IllegalStateException。这是为什么?我能知道这对.的工作原理吗
我最近在业余时间学习了不同的算法,我遇到的一个看起来非常有趣的算法叫做超级日志算法——它估计一个列表中有多少独特的项目。 这对我来说特别有趣,因为它让我回到了我的MySQL时代,那时我看到了“基数”值(直到最近我一直认为它是计算出来的,不是估计出来的)。 所以我知道如何用O(n)编写一个算法,计算数组中有多少个唯一项。我是用JavaScript写的: 但问题是,我的算法虽然是O(n),但使用了大量