使用Selenium WebDriver从IWebElement获取所有属性
我想使用Selenium从DOM中提取一些信息。我正在使用C#WebDriver。
查看IWebElement接口,您可以轻松提取给定的属性。但是,我想提取一个元素的所有属性而无需事先知道它们的名称。
必须有一些简单的方法来执行此操作,因为如果您知道属性名称,则可以使用一种方法来获取属性值。
一个例子:
<button id="myButton" ng-click="blabla()" ng-show="showMyButton" some-other-attribute="foo.bar" />
IWebElement element = driver.FindElement(By.Id("myButton"));
Dictionary<string, string> attributes = new Dictionary<string, string>();
// ???????
// Profit.
希望我缺少明显的东西。
提前致谢!
回答:
.attributes
JavaScript中的属性将返回给定元素具有的所有属性及其值的数组。
因此,您需要做的是首先获得一个driver
具有运行JavaScript功能的功能:
IJavascriptExecutor javascriptDriver = (IJavaScriptExecutor)driver;
现在,通过以下方式执行它:
Dictionary<string, object> attributes = javascriptDriver.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) as Dictionary<string, object>;
JavaScript的思想是attributes
在元素本身内使用JavaScript 属性,然后提取我们需要的信息-
属性的名称和值。attributes
实际上,该属性可获取有关每个属性的大量信息,但我们只需要两个字段。因此,我们得到了这两个字段,将它们放入字典中,然后WebDriver会将其解析回给我们。(它可能会被清理一点)
现在是a Dictionary
,因此您可以随意循环浏览。的key
每对将是 名称 属性的,并且value
每对将是 值 的属性。
仅使用在网络上点缀的一些元素(这里是Google和一些小的网页)进行了测试,它似乎运行良好。
以上是 使用Selenium WebDriver从IWebElement获取所有属性 的全部内容, 来源链接: utcz.com/qa/433722.html