Можно ли иметь видимый элемент без высоты и ширины? - PullRequest
0 голосов
/ 09 января 2020

Я просматривал существующую инфраструктуру автоматизации Selenium, где есть код, который проверяет ширину и высоту элемента. Если они имеют только положительные значения, тогда он будет взаимодействовать, например, щелчок, двойной щелчок и т. Д. c.

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;
}

Насколько я понимаю, каждый видимый / интерактивный элемент имеет положительную высоту и ширину. Я запутался, почему этот код был написан.

Не могли бы вы подтвердить правильность моего понимания? Если нет, пожалуйста, помогите мне понять случаи, когда это возможно.

1 Ответ

1 голос
/ 09 января 2020

WebElement должны иметь ширину и высоту, чтобы быть труднодоступным, но его можно считать видимым в двух случаях: у него положительная ширина обводки или у них есть дочерний узел / текстовый узел с положительным размером

Из Спецификации WebDriver Отображаемость элемента

Алгоритм отображаемого элемента является логическим состоянием, где true означает, что элемент отображается, а false означает, что элемент не отображается. Чтобы вычислить состояние элемента, вызовите Call (bot.dom.isShown, null, element).

From bot.dom.isShown_ в github (строка 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));
        });
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...