【问题标题】:getAttribute not returning complete value for style in seleniumgetAttribute 未返回 selenium 中样式的完整值
【发布时间】:2013-02-26 12:11:29
【问题描述】:

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

请帮帮我!!

【问题讨论】:

  • 那么什么版本的 Selenium?什么浏览器?这是什么语言的?
  • 使用 Junit,firefox,我不知道的版本
  • 你不是最好找出来吗?什么版本的火狐?
  • firefox 17.0,不知道如何找到硒版本,谷歌搜索但找不到
  • 如果您只是想检查一个元素的可见性,请尝试在其上调用isDisplayed(),而不是检查样式属性。

标签: selenium selenium-webdriver getattribute


【解决方案1】:

我刚刚在 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);
    

【讨论】:

  • 感谢您的帮助。实际上的问题是,在我将鼠标悬停在链接上后,可见性样式属性值变得可见,这会导致弹出窗口。为这个弹出窗口定义了可见性属性,使用了 super.pause 一段时间,我可以看到所有内联属性。
  • 但是,我不确定为什么 remaninig 属性值没有出现,因为即使弹出窗口不可见,它们仍然在萤火虫中可见
猜你喜欢
  • 2020-10-02
  • 2021-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多