【问题标题】:Extract DOM property value using Selenium使用 Selenium 提取 DOM 属性值
【发布时间】:2016-08-10 06:06:13
【问题描述】:

在 Firebug 和其他 DevTools 中,您可以获取与 HTML 元素对应的 DOM 属性和值。

如何使用 selenium-java 代码提取这些值? 我试过getAttribute(),但它似乎只适用于 HTML 属性,而不适用于“值”或“拼写检查”等 DOM 属性。

我采用这种方法的原因是与<input> 文本字段(下面的sn-p)关联的值是运行时生成的,并且使用Knockout 将数据绑定到它。因此无法使用getText()getAttribute("value")getAttribute("text")getAttribute("innerHTML")getAttribute("innertext") 等标准方法捕获它们。

HTML 元素的 HTML sn-p:

<input class="form-control" type="text" style="cursor: text" readonly="readonly" data-bind="textInput: url">

【问题讨论】:

    标签: java dom selenium-webdriver


    【解决方案1】:

    根据Selenium documentation,只有getAttribute()函数,描述如下:

    获取元素的给定属性的值。将返回当前值,即使在页面加载后已对其进行了修改。更准确地说,此方法将返回给定属性的值,除非该属性不存在,在这种情况下,将返回具有相同名称的属性的值(例如对于 textarea 元素的“值”属性)。如果两个值都没有设置,则返回 null。 ...

    据此,getAttribute("value") 应该返回 DOM 属性值,以防没有名为 value 的 HTML 属性。

    如果不是这样,则可能是时间问题。 IE。 Selenium 在设置之前读取该值。

    【讨论】:

    • 在 Eclipse 的调试模式下尝试过,所以我可以确定它不是页面同步问题。我一直在等待页面加载。 getAttribute("value") 返回 null 而当我使用 firebug 检查时,我能够正确看到“value”。淘汰赛 js 数据绑定是否与此有关?
    • 我不这么认为,因为 value 属性显然已根据您的屏幕截图正确设置。因此,Selenium 应该能够读取它。虽然我还没有使用 Knockout.js 来确定这一点。
    【解决方案2】:

    我知道这是一个老问题,但它可能会帮助其他人

    在控制台中使用它

    $$("input.form-control").value
    

    如果它返回所需的,您将不得不使用WebDriver 执行Javascript,即

    driver.ExecuteScript("var data = arguments[0].value; return data;", (Element as RemoteWebElement)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多