Python-Selenium根据同级元素值查找元素

mctunoxg  于 2022-12-13  发布在  Python
关注(0)|答案(1)|浏览(251)

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中插入价格。
因为这只是一个更大的代码片段,其中类名位置等是动态生成的。我需要这样做。

wnavrhmk

wnavrhmk1#

您可以根据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包含一个直接的span子元素(包含Price文本)来定位父元素div
因此,span[contains(text(),'Price')]会将spanPrice文本内容匹配,而//div[./span[contains(text(),'Price')]]的字面意思是:
“在//的某个地方找到一个具有div标记名称的元素,以便在该元素内部(这就是为什么在那里使用点.)有一个直接子元素/span,其文本内容是Price“。
一旦我们有了这个div,我们就可以找到它的input子级。
就这么简单。

相关问题