使用xpath按值查找输入字段,不带值属性

时间:2016-06-14 15:40:40

标签: python selenium xpath

鉴于此html:

<input id="test" value="my text" />

使用xpath很容易获得输入元素的句柄。类似的东西:

input[@value="my text"]

但如果原始html看起来像这样:

<input id="test" />

如果你在浏览器中查看它仍然有'我的文字' - 因为这已经添加了这样的javascript:

document.getElementById('test').value = 'my text';

在小提琴中,您可以看到输入字段中包含“我的文字”字样,但没有值属性:https://jsfiddle.net/justinwyllie/5dsxa8mc/

如何选择此元素?只是xpath - 没有jQuery。

1 个答案:

答案 0 :(得分:3)

考虑到这是Python + Selenium,我会按照以下方式处理它:

inputs = driver.find_elements_by_tag_name("input")  # TODO: improve the locator to get less input elements
input_elm = next(input_elm for input_elm in inputs 
                 if input.get_attribute("value") == "my text")

请注意,get_attribute("value")会获得.value属性的计算值,这正是解决此问题的原因。

另请注意,如果不匹配,next()会引发StopIteration异常 - 您可以通过try/except处理该问题,或提供默认值:

input_elm = next((input_elm for input_elm in inputs 
                 if input.get_attribute("value") == "my text"), None)