c# - 使用 Selenium WebDriver 从 IWebElement 获取所有属性

原文 标签 c# selenium selenium-webdriver

我想用 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 中的 property 将返回给定元素具有的所有属性及其值的数组。

所以你需要做的是首先得到一个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 背后的想法是使用 JavaScript attributes元素本身内部的属性然后拉出我们需要的信息——属性的名称和值。 attributes property,实际上,提取了有关每个单独属性的大量信息,但我们只需要两个字段。所以我们得到这两个字段,将它们放入字典中,然后 WebDriver 会将其解析回给我们。 (可能会稍微清理一下)

现在是 Dictionary因此,您可以随心所欲地循环播放。 key每对将是属性的名称,value每对的值将是属性的值。

只用网络上散布的一些元素(这里是谷歌和一些小网页)对此进行了测试,它似乎运行良好。

关于c# - 使用 Selenium WebDriver 从 IWebElement 获取所有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21681897/

相关文章:

c# - 多个消息框选项

angularjs - ( Protractor e2e)出现错误 "A Jasmine Spec timed out: Resetting WebDriver Control Flow"

selenium - 在 Selenium IDE 中记录 IFrame 事件

python - 页面源未显示有关 Selenium /Python的广告

c# - SelectCommand.Connection属性尚未初始化

c# - 跟踪无效的回发或回调参数

ruby-on-rails - Selenium Webdriver - 刷新陈旧元素快捷方式?

java - 使用我自己的框架执行Selenium Grid Execution

java - 如何使用Selenium和Java从多重选择列表中获取选定选项的文本

c# - 通过没有垃圾的反射获取值