XPATH:尝试从 span class 包含特定文本的元素中 select 按钮

XPATH: trying to select button from element where span class contains certain text

我正在尝试 select class 的特定按钮,该按钮在其跨度 class 中还包含特定文本。该网站设置为在访问时加载随机元素,所以我不能使用我认为更具体的路径。

按钮路径

xpath = "/html/body[@class='js-page-layout-main']//div[@class='main-container']//div[@class='wishlist-selector wishlist-selector--product-listing']//button[@title='Adicionar a lista de desejos']"

跨度路径

xpath = "//span[contains(text(),'Poucas unidades')]"

这两个表达式都适用于它们自己,但是当我将它们连接在一起时,另一个元素的按钮得到 selected,而不是在其范围 class 中包含所需文本的按钮。我不确定为什么这不起作用..

编辑:

管在一起

xpath = "//span[contains(text(),'Poucas unidades')] | /html/body[@class='js-page-layout-main']//div[@class='main-container']//div[@class='wishlist-selector wishlist-selector--product-listing']//button[@title='Adicionar a lista de desejos']"

编辑 2: html

<div class="col">
<article class>
<div class="wishlist-selector wishlist-selector--product-listing" data-qa="component wishlist-selector">
<form method="POST" action="/wishlist/add-item?sku=49850&amp;redirectUri=/computadores?price-range%3D1%253B37699%26price%255Bmin%255D%3D%26price%255Bmax%255D%3D%26sort%3D" class="wishlist-selector__form">
<button type="submit" class="btn btn-outline" title="Adicionar a lista de desejos">
<i class="    material-icon align-items-center js-material-icon
" data-qa="component material-icon">
favorite_border
</i>
</button>
</form>
</div>
<div class="label-group" data-qa="component label-group">
</div>
<div class="row">
<div class="col">
<a href="/mala-trolley-156-verbatim-frankfurt-preto-49850">
<div class="img-wrapper--ar-100 img-wrapper--ck-product-box">
<img class="lazyload img-fluid" ... >
</img>
</div>
</a>
</div>
<div class="col">
<h6 class="mb-0"><a class="color-inherit text-decoration-none" href="/mala-trolley-156-verbatim-frankfurt-preto-49850">Mala Trolley 15.6&quot; Verbatim Frankfurt Preto</a></h6>
<div class="ck-product-box-sku">49850</div>
<div class="ck-product-box-short-description visible-listing-alt"><ul>
<li>Mala ideal para viagens de negócios de curta duração</li>
<li>Cinco diferentes compartimentos</li>
<li>Compatível com portáteis até 15.6"</li>
</ul></div>
</div>
<div class="col">
<span class="price price--sale-red h2 mb-0" data-qa="component price">
<span class="price__amount">
99,90 €
</span> </span>
<div class="availability-product" data-qa="component availability-product">
<span class="availability-text" data-qa="type_">
<i class="    material-icon text-success js-material-icon
" data-qa="component material-icon">
fiber_manual_record
</i>
<span> Poucas unidades</span>
</span>
</div>

| 运算符为您提供两个节点集的并集。你想用第二个表达式来过滤第一个,所以使用:

/html/body[@class='js-page-layout-main']//div[@class='main-container']//div[@class='wishlist-selector wishlist-selector--product-listing']//button[@title='Adicionar a lista de desejos' and .//span[contains(text(),'Poucas unidades')]]

编辑: 更新问题后,可以看到 <span> 不包含在 button 中,但它们有一个共同的父级<article>,所以只需将 span 上的条件移动到 <article> 元素:

//article[.//span[contains(text(), 'Poucas unidades')]]//button[@title = 'Adicionar a lista de desejos']