Selenium webdriver获取元素的所有数据属性

时间:2016-04-05 03:48:55

标签: selenium selenium-webdriver

使用Selenium webdriver我有以下元素

<div data-1223="some data" data-209329="some data" data-dog="some value">

有没有办法获取元素的所有数据属性? 对于特定属性,我可以使用

elem.getAttribute('data-1223') 

但我怎样才能将所有数据属性放在一起

3 个答案:

答案 0 :(得分:11)

使用以下代码: -

WebElement element = "Your Element"; // Your element
JavascriptExecutor executor = (JavascriptExecutor) driver;
Object aa=executor.executeScript("var items = {}; for (index = 0; index < arguments[0].attributes.length; ++index) { items[arguments[0].attributes[index].name] = arguments[0].attributes[index].value }; return items;", element);
System.out.println(aa.toString());

希望它会对你有所帮助:)。

答案 1 :(得分:2)

没有。 Selenium WebDriver无法访问任何您不知道其全名的属性。您甚至无法枚举WebElement的所有属性。

看起来jsonwire协议不支持这个概念。 GET_ELEMENT_ATTRIBUTE命令采用属性名称列表,而不是属性名称模式列表。

您可能可以通过JavascriptExecutor和XPath或CSS查询来查找元素的所有属性名称,然后使用它来循环getAttribute。但是,如果您要这样做,您可以构建您的XPath或CSS查询以直接为您提供值,并将WebElement完全保留。

答案 2 :(得分:0)

此概念非常有效。试试吧!

WebElement element = driver.findElement(By.tagName("button"));

JavascriptExecutor executor = (JavascriptExecutor) driver;
Object elementAttributes = executor.executeScript("var items = {}; for (index = 0; index < arguments[0].attributes.length; ++index) { items[arguments[0].attributes[index].name] = arguments[0].attributes[index].value }; return items;",element);

System.out.println(elementAttributes.toString());