我在以下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提取元素
请帮帮我!!
答案 0 :(得分:4)
我刚用Selenium 2.30.0尝试了这个并且它工作正常,返回整个属性。
尝试以下方法(所有示例都假设element
是您需要测试的WebElement
:
让确实确保只返回属性的一部分。你不是只是把它打印到控制台吗?许多控制台的线路长度有限。尝试将控制台设置为显示长行。以编程方式检查返回值的长度,或尝试评估
element.getAttribute("style").contains("visibility")
如果可以,请尝试升级Selenium库。我不知道任何与属性获取相关的错误,但可能已经解决了一些问题(版本2.30.0)。
在其他浏览器/操作系统/架构中试用它。如果它在某个地方工作,你就会知道这是一个特定浏览器/驱动程序/操作系统/架构/问题的问题,你可以将其集中注意力并修复它或file a bug。
如果您只是想知道某个元素是否可见,那么正确且通常首选的方式是调用
element.isDisplayed()
此方法会处理您可能需要检查的所有规则,以确定它是否实际可见。
如果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);
如果您确实需要获取浏览器实际使用的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);