pan*_*rek 7 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.
Run Code Online (Sandbox Code Playgroud)
希望我错过了一些明显的东西.
提前致谢!
Arr*_*ran 12
.attributesJavaScript中的属性将返回给定元素具有的所有属性的数组及其值.
所以你需要做的是首先得到一个driver能够运行JavaScript的东西:
IJavascriptExecutor javascriptDriver = (IJavaScriptExecutor)driver;
Run Code Online (Sandbox Code Playgroud)
现在,执行它:
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>;
Run Code Online (Sandbox Code Playgroud)
JavaScript背后的想法是使用attributes元素本身内的JavaScript 属性,然后提取我们需要的信息 - 属性的名称和值.attributes实际上,该物业提取了有关每个物业的大量信息,但我们只想要两个字段.所以我们得到这两个字段,将它们放入字典中,然后WebDriver将它解析回给我们.(它可能会被清理一下)
它现在是一个Dictionary,因此你可以循环,但你喜欢.的key每对将是名称属性的,并且value每对将是值的属性.
只有在网络上点缀了一些元素(这里是谷歌和一些小网页)才对此进行测试,它似乎运行良好.
小智 8
你可以试试这个:
IWebElement element = driver.FindElement(By.Id("myButton"));
string elementHtml = element.GetAttribute("outerHTML");
Run Code Online (Sandbox Code Playgroud)
这将为您提供元素的html.从这里开始,你可以解析它,正如Arran建议的那样