[英]Python-Selenium find element based on it sibling element value
Html 代码如下所示。
<div>
<span>Title</span>
<input value="a">
</div>
<div>
<span>Price</span>
<input value="">
</div>
我需要检查 Span 是否是价格然后为价格等插入值...
基本上我可以访问所有输入,比如
for el in driver.find_elements(by=By.XPATH, value="//input"):
try:
if el.parent.span... == 'Price': #HERE I NEED TO ADD MISSING PART
el.send_keys('10')
except:
pass
但后来我无法确定上节点值。
还尝试过:
driver.find_element(by=By.XPATH, value="//input/preceding-sibling::span[contains(.,'Price')]")
像这样,我能够找到 Span 元素,但我需要在 INPUT 中插入价格。
因为这只是一个更大代码的片段,其中 class 名称位置等是动态生成的。 我需要这样 go。
您可以根据span
兄弟文本内容值定位input
元素,如下所示:
"//div[contains(.,'Price')]//input"
(有更多方法可以做到这一点)。
所以你的 Selenium 代码可以如下:
driver.find_element(By.XPATH, "//div[contains(.,'Price')]//input").send_keys('10')
如果<span>Price</span>
是父div
的直接子元素,我们可以使定位器更精确,如下所示:
driver.find_element(By.XPATH, "//div[./span[contains(text(),'Price')]]//input").send_keys('10')
简要说明:
使用 XPath 我们可以通过任何 it 属性定位元素。
在这里,我们可以根据父 div 包含包含Price
文本的直接span
子元素的事实来定位父div
。
因此, span[contains(text(),'Price')]
将匹配带有Price
文本内容的span
,而//div[./span[contains(text(),'Price')]]
字面意思是:
“在某处找到//
带有div
标签名称的元素,以便在其中(这就是为什么在那里使用点.
的原因)直接子级/
是文本内容为Price
的span
”。
一旦我们有了这个div
,我们就可以通过//input
找到它的input
child。
很简单。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.