Html Selenium CSS选择器:使用另一个子元素作为唯一标识符选择子元素(表亲选择器?)

Html Selenium CSS选择器:使用另一个子元素作为唯一标识符选择子元素(表亲选择器?),html,css-selectors,selenium-ide,Html,Css Selectors,Selenium Ide,我很抱歉,如果这个问题已经得到了令人生厌的回答。我要么没有理解答案,要么没有发现这种情况的直接答案。我需要选择一个子元素,使用它的同级作为标识符。下面是一个代码片段示例 <div class="my-groups-popup"> <div class="listbox-container"> <div class="list-item"> <div class="edit-box"> <di

我很抱歉,如果这个问题已经得到了令人生厌的回答。我要么没有理解答案,要么没有发现这种情况的直接答案。我需要选择一个子元素,使用它的同级作为标识符。下面是一个代码片段示例

<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>
但是由于惟一值是元素的一部分,所以我不确定如何形成选择器。按钮不是输入元素的直接同级。但输入的祖父母与按钮的祖父母相同。我的想法是:

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 
但是当我试着那样做的时候,它不起作用。另外,使用“~*”不会返回任何数组。因此,我怀疑我没有接近正确的语法。

表示两个仅为兄弟元素的元素。正如您所注意到的,所讨论的两个元素不是直接的兄弟元素,因为每个元素都有自己的祖先集。它们仅由
.list项
元素关联,该元素位于层次结构的更上层

可以说,由于CSS选择器不能升序,也没有类似于
:contains()
的选择器,但是对于属性值,您将希望使用XPath:

xpath=//div[@class='my-groups-popup']/div/div[genderant::input[@value='The Second input']]]//按钮[1]
或者,如果我们研究您的HTML代码片段,我们可以看到
.my groups popup.listbox container
只有
.list item
元素作为子元素,并且这些子元素中的每一个都有一个输入和一组按钮控件。如果我们可以假设
.my groups popup
的HTML结构始终遵循此模式,那么我们可以在
列表项
元素上使用
:nth-child()
来查找对应于适当输入的按钮控件:

css=.my-groups-popup .list-item:nth-child(2) .controls button.move-up

没有CSS选择器可以帮助您根据输入值获取所需的按钮,但是您可以使用
:nth child
查找第二个列表项,这会有帮助吗?我想我可能必须使用XPath。我可能不得不这样做,但我也会尝试第n个孩子的解决方案。作为参考,我提供的代码片段不是.list容器下的整个树。我只是提供了足够的(希望)来展示我正在处理的事情。