getAttribute不返回selenium中样式的完整值

时间:2013-02-26 12:11:30

标签: selenium selenium-webdriver getattribute

我在以下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提取元素

请帮帮我!!

1 个答案:

答案 0 :(得分:4)

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

尝试以下方法(所有示例都假设element是您需要测试的WebElement

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

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

  3. 在其他浏览器/操作系统/架构中试用它。如果它在某个地方工作,你就会知道这是一个特定浏览器/驱动程序/操作系统/架构/问题的问题,你可以将其集中注意力并修复它或file a bug

  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. 如果您确实需要获取浏览器实际使用的CSS visibility属性的计算值,而不是style属性中的那个(如果有的话)任何或以某种方式被覆盖),您需要使用JavaScript的getComputedStyle()方法。一种方式(由this article on 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);