繁体   English   中英

Python-Selenium 根据其兄弟元素值查找元素

[英]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标签名称的元素,以便在其中(这就是为什么在那里使用点.的原因)直接子级/是文本内容为Pricespan ”。
一旦我们有了这个div ,我们就可以通过//input找到它的input child。
很简单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM