首页 > 解决方案 > Selenium:通过 Javascript 抓取所有元素属性返回不正确的结果

问题描述

我正在使用以下代码通过 javascript 抓取所有元素属性:

((JavascriptExecutor) driver).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);

虽然这主要只返回标识相关元素的属性,但我发现此代码返回的某些属性实际上并不对应于所需的元素。

一个例子:

如果您导航到http://google.com并通过(或许多其他 XPath 中的任何一个)识别搜索框(.//input[contains (@role,'combobox')]),然后执行所述 JS 代码,它会返回(.//input[contains (@class,'gsfi lst-d-f')])实际上与搜索框不对应的属性。事实上,当使用 FireBug 时,这个属性甚至不会出现在页面上。

我确实注意到,虽然页面上的样式标记中隐藏了类似的文本,但即使在那里我也没有找到该文本的完全匹配。在任何一种情况下,它仍然不对应于所讨论的元素。

为什么 JS 会返回这个文本,有没有办法解决它?

谢谢

标签: javascriptjavaseleniumselenium-webdriverwebdriver

解决方案


推荐阅读