【问题标题】:Selenium - How to find a list of an element's CURRENT attributesSelenium - 如何查找元素的当前属性列表
【发布时间】:2015-12-07 07:27:01
【问题描述】:

基于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 代码以显示正确的属性列表?

【问题讨论】:

    标签: javascript python selenium attributes webdriver


    【解决方案1】:

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

    您使用的 JavaScript 代码确实会返回 属性的所有值。交易是这样的:当input 元素的值发生变化时,它的value 属性 不会改变,但它的value 属性 会改变。 property 包含input 元素的当前值。您可以通过与元素对应的 DOM 节点上的 .value 字段来访问它。你可以这样做:

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

    返回此属性的值。

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

    所以你的 JavaScript 代码做的正是它应该做的:它返回属性值,但这不是你需要的,你需要 value 属性的值。

    【讨论】:

    • 精彩的解释!你很准。也许你可以帮助我更进一步。我的问题在于,当我输入某个 vlan 输入值时,会导致意外错误。我试图弄清楚为什么在没有访问 javascript 源代码的情况下会发生此错误。我的想法是,当它处于“错误状态”时,可能会添加一个额外的属性,这可能会提供关于为什么在有效输入上引发错误的线索。请注意,仅当通过 selenium 更改值而不是手动更新时才会引发此错误。
    • 根据您在此处提供的描述,您没有想到任何东西。我建议发布一个新问题,其中包括相关的 Selenium 代码、相关的 HTML 和 JavaScript,以及您所看到的内容的详细描述。
    猜你喜欢
    • 1970-01-01
    • 2021-03-24
    • 2020-04-12
    • 2020-10-30
    • 2015-12-05
    • 2013-07-03
    • 2018-09-01
    • 2015-02-03
    • 1970-01-01
    相关资源
    最近更新 更多