2

我在以下 id 元素上使用 selenium getAttribute("style") 方法:-

<div id="ntsDiv_1" style="width: 250px; text-align: left; white-space: normal; top: 1090px; left: 131px; visibility: hidden;" class="mlt-pop-container">

但 API 只返回一半的值。它正在返回width: 250px; text-align: left; white-space: normal;并且样式的剩余部分被剪裁。

我正在尝试提取可见性的值,但该方法没有返回样式的完整值。因此,我无法确定能见度的正确值。

我执行了System.out.println("Style is:- "+super.getElement(NEXTAG_STORES_DIV).getAttribute("style"));

NEXTAG_STORES_DIV 对应id元素的xpath,super.getElement通过xpath提取元素

请帮帮我!!

4

1 回答 1

4

我刚刚用 Selenium 2.30.0 试过这个,它工作正常,返回整个属性。

尝试以下操作(所有示例都假设elementWebElement需要测试):

  1. 确保返回属性的一部分。您不只是将其打印到控制台吗?许多控制台的线路长度有限。尝试将您的控制台设置为显示长行。以编程方式检查返回值的长度,或尝试评估

    element.getAttribute("style").contains("visibility")
    
  2. 如果可以,请尝试升级您的 Selenium 库。我不知道有任何与属性获取相关的错误,但现在可能已经解决了一些错误(版本 2.30.0)。

  3. 在不同的浏览器/操作系统/架构中尝试。如果它在某个地方工作,您就会知道这是特定浏览器/驱动程序/操作系统/架构/任何东西的问题,您可能能够集中精力并修复它或提交错误

  4. 如果您只是想知道一个元素是否可见,正确且通常首选的方法是调用

    element.isDisplayed()
    

    此方法处理您可能需要检查的所有规则,以确定它是否实际可见。

  5. 如果style值在页面上动态变化(即它不是静态写入页面的源代码中),WebDriver则无法真正看到它,因为它没有获取动态变化。尝试通过 JavaScript 访问该值:

    if (!driver instanceof JavascriptExecutor) {
        throw new IllegalStateException("JavaScript not enabled for this driver!");
    }
    JavascriptExecutor js = (JavascriptExecutor)driver;
    String styleAttribute = (String)js.executeScript("return arguments[0].style", element);
    
  6. 如果您确实需要获取visibility浏览器实际使用的 CSS 属性的计算值,而不是属性中的值style(如果没有或被某种方式覆盖),则需要使用 JavaScript 的getComputedStyle()方法。一种方法(由quirksmode.org 上的这篇文章描述)是这样的:

    var elem = arguments[0];
    if (elem.currentStyle) {
        var vis = elem.currentStyle['visibility'];
    } else {
        var vis = document.defaultView.getComputedStyle(elem, null).getPropertyValue('visibility');
    }
    return vis;
    

    同样,这应该通过调用

    String visibility = (String)js.executeScript(here_goes_the_whole_script, element);
    
于 2013-02-26T15:42:22.333 回答