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

时间:2014-08-04 21:17:38

标签: html css-selectors selenium-ide

如果这个问题得到了解决,我很抱歉。我要么没有理解答案,要么没有发现这种情况直接回答。我需要选择一个子元素,使用它的兄弟作为标识符。这是一个代码段示例

<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 

但是当我尝试时,它没有用。此外,使用“〜*”没有返回任何数组。所以我怀疑我没有接近正确的语法。

1 个答案:

答案 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