当前位置: 首页 > 知识库问答 >
问题:

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

庾奇思
2023-03-14

我想用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.

希望我错过了一些明显的东西。

提前感谢!

共有3个答案

袁奇文
2023-03-14
List<IWebElement> el = new List<IWebElement>(); el.AddRange(driver.FindElements(By.CssSelector("*")));

List<string> ag= new List<string>();
for (int b = 0; b < el.Count; b++)
{                    
    ag.Add(el[b].GetAttribute("outerHTML"));
}
许高峻
2023-03-14

你可以试试这个:

IWebElement element = driver.FindElement(By.Id("myButton"));

string elementHtml = element.GetAttribute("outerHTML");

这将为您提供元素的html。从这里,您可以解析它,正如Arran所建议的那样

傅志文
2023-03-14

JavaScript中的。属性属性将返回给定元素具有的所有属性及其值的数组。

因此,您需要做的是首先获得一个能够运行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属性提取了关于每个单独属性的大量信息,但我们只需要两个字段。我们得到这两个字段,将它们放入字典中,然后WebDriver会将其解析回给我们。(可能需要清理一下)

它现在是一个字典,因此你可以随意循环。每对的键将是属性的名称,每对的值将是属性的值。

测试了分布在网络上的一些元素(这里是谷歌和一些小网页),它似乎工作得很好。

 类似资料:
  • 问题内容: 我想使用Selenium从DOM中提取一些信息。我正在使用C#WebDriver。 查看IWebElement接口,您可以轻松提取给定的属性。但是,我想提取一个元素的所有属性而无需事先知道它们的名称。 必须有一些简单的方法来执行此操作,因为如果您知道属性名称,则可以使用一种方法来获取属性值。 一个例子: 希望我缺少明显的东西。 提前致谢! 问题答案: JavaScript中的属性将返回

  • 问题内容: 我试图遍历一个元素并获取该元素的所有属性以输出它们,例如,一个标签可能具有3个或更多属性,我不知道,我需要获取这些属性的名称和值。我在考虑以下方面: 谁能告诉我这是否可能,如果可以,正确的语法是什么? 问题答案: 该属性包含它们全部: 您还可以做的是扩展,以便可以像获取所有属性的普通对象一样调用它: 用法:

  • 我创建了这个扩展方法,它从一个KClass获取所有属性 扩展方法 示例用法 结果 val公司。演示。富。酒吧:科特林。内景 val公司。演示。富。巴兹:科特林。一串 VARcom.demo.Foo.boo:kotlin。字符串? 如何修改此扩展方法以仅返回在主构造函数中声明的属性? 预期成果 val公司。演示。富。酒吧:科特林。内景

  • 问题内容: 如何在此页面上获取此“ h2”标题的所有“ href”属性? 我尝试过的没有得到href的是: 这没有获得“ a”标签的链接。如果我在“ a”标签上找到了所有元素,它将返回页面上的每个href(这不是我想要的)。我只想返回上述标题,但能够获取其url“ href”属性。 问题答案: 这是从所有页面获取所有书籍的代码:

  • 但是响应只返回用户和他们的一些属性,而不是我在门户中看到的所有属性。 进行REST调用以获取所有用户及其字段/属性的正确URI是什么?