Selenium - 如何查找元素的当前属性列表

Selenium - How to find a list of an element's CURRENT attributes

基于 Selenium webdriver: How do I find ALL of an element's attributes?

中提出的问题

当我使用这个答案时,我得到了元素属性的预期结果。但是它不是最新的,换句话说不是我在屏幕上看到的。

例如:

>attrs = driver.execute_script('var items = {}; for (index = 0; index <arguments[0].attributes.length; ++index) { items[arguments[0].attributes[index].name] = arguments[0].attributes[index].value }; return items;', vlan)
>print attrs
{ u'name': u'PixF1InterfaceVLAN', u'value': u'1',}

但是如果我查看相同的元素 'vlan':

>vlan.get_attribute("value")
 u'10'

这是我在屏幕上看到的。我的问题是如何更新 Javascript 代码以使其显示正确的属性列表?

我猜测您正在查看的元素是一个 input 元素,该元素已被以某种方式操纵以更改其值。问题是 Selenium 试图提供帮助却无益地混淆了问题。让我解释一下。

您使用的 JavaScript 代码 return 属性 的所有值。事情是这样的:当一个 input 元素的值改变时,它的 value 属性 不会改变,但它的 value 属性 确实如此。 属性 包含 input 元素的当前值。您可以将其作为对应于元素的 DOM 节点上的 .value 字段进行访问。你可以这样做:

driver.execute_script('return arguments[0].value;', vlan)

到return这个属性的值。

但是 vlan.get_attribute("value") 怎么会起作用呢?当您执行 .get_attribute("value") 时,Selenium 所做的实际上是获取 属性 的值。你认为你正在获取属性的值,但你没有。基本上,Selenium 默默地纠正了我们很多人最初在想要获取 input 元素的当前值时的误解。

所以你 JavaScript 代码做了它应该做的事情:它 return 属性值,但这不是你需要的,你需要 value [=51= 的值].