如果这个问题得到了解决,我很抱歉。我要么没有理解答案,要么没有发现这种情况直接回答。我需要选择一个子元素,使用它的兄弟作为标识符。这是一个代码段示例
<div class="my-groups-popup">
<div class="listbox-container">
<div class="list-item">
<div class="edit-box">
<div class="body">
<input type="text" value="The First Input">
</div>
</div>
<div class="controls">
<button class="image move-up"></button>
<button class="image move-down"></button>
<button class="image delete"></button>
</div>
</div>
<div class="list-item">
<div class="edit-box">
<div class="body">
<input type="text" value="The Second Input">
</div>
</div>
<div class="controls">
<button class="image move-up"></button>
<button class="image move-down"></button>
<button class="image delete"></button>
</div>
</div>
...
<div class="list-item">
<div class="edit-box">
<div class="body">
<input type="text" value="The nth Input">
</div>
</div>
<div class="controls">
<button class="image move-up"></button>
<button class="image move-down"></button>
<button class="image delete"></button>
</div>
</div>
</div>
</div>
可以看出,我有一个列表框容器,它有几个列表项。每个列表项包含一个输入框和3个按钮控件。但是输入在组中是唯一的唯一性,是我需要选择的按钮控件的“表亲”。
通常,我会尝试类似的事情:
css=.my-groups-popup .list-item:contains("The Second Input") button.move-up
但由于唯一值是元素的一部分,我不知道如何形成选择器。该按钮不是输入元素的直接兄弟。但输入的祖父母与按钮的祖父母相同。我想的是:
css=.my-groups-popup .list-item input[value="The Second Input"] ~ .controls button.move-up
但是当我尝试时,它没有用。此外,使用“〜*”没有返回任何数组。所以我怀疑我没有接近正确的语法。
答案 0 :(得分:2)
~
combinator代表只有兄弟姐妹的两个元素。如您所知,这两个元素不是直接兄弟,因为每个元素都有自己的祖先集。它们仅与.list-item
元素相关,后者在层次结构中更远。
由于CSS选择器无法提升,可以这么说,也没有类似:contains()
的选择器,但对于属性值,您将需要使用XPath:
xpath=//div[@class='my-groups-popup']/div/div[descendant::input[@value='The Second Input']]//button[1]
或者,如果我们研究您的HTML代码段,我们可以看到.my-groups-popup .listbox-container
只有.list-item
元素作为子元素,并且这些子元素中的每一个都只有一个输入和一组按钮控件。如果我们可以假设.my-groups-popup
的HTML结构将始终遵循此模式,我们可以在:nth-child()
元素上使用.list-item
来查找与相应输入相对应的按钮控件:
css=.my-groups-popup .list-item:nth-child(2) .controls button.move-up