我有一个包含元素的页面:
<input id="foo"></input>
它(通过 Javascript)的 value
设置为“bar”。
如果我使用以下 XPath 语句(使用 Python/Selenium):
self.browser.find_elements_by_xpath("//input[@id='foo']")
它返回我的元素,我什至可以这样做:
self.browser.find_elements_by_xpath("//input[@id='foo']")[0].get_attribute("value")
并取回 u"bar"
。但是,如果我尝试这样做:
self.browser.find_elements_by_xpath("//input[@value='bar']")
甚至只是:
self.browser.find_elements_by_xpath("//input[@value]")
我的元素没有被返回。
这对我来说唯一有意义的方法是如果我的 Javascript 代码设置“值”属性,而不是“值”属性(当我查看Firefox 检查器中的元素没有显示“值”属性,这强化了这一理论)。
所以,我的问题是,如何选择具有“值”属性的元素?
最佳答案
您显然已经发现,您对 [@value] 并不真正感兴趣,它是 DOM 对象上的“值”属性。相反,您试图在 JavaScript 对象上查找“foo”属性 的值。
通常,JavaScript 对象的属性不会在 DOM 上公开。您需要向下查询 JavaScript 本身以查看这些对象及其属性。您可以通过 the JavaScript executor 做到这一点.我没有使用 WebDriver 的 Python 绑定(bind),因此确切的语法/方法可能会有所不同——但方法通常是相同的。
关于python - Selenium XPath "[@value]"与值不匹配的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21120288/