Selenium:如何在同一个父元素下选择另一个子元素(C#)

时间:2018-04-06 23:17:39

标签: c# selenium-webdriver element

我有一个关于在父元素中选择子元素的问题,而locator选择了另一个子元素。

我有以下页面:

<tbody class="x-list-container"> <tr class="first-row"> <div class="x-supplier-dropdown">   <div>
    <div id="s2id_autogen75" class="select2-container x-input select2-container-active select2-dropdown-open" style="width: 100%;">
      <a class="select2-choice" tabindex="-1"> 
        <span class="select2-chosen">Yes</span>
        <abbr class="select2-search-choice-close">
        </abbr> 
      </a>
      <input id="s2id_autogen76" class="select2-focusser select2-offscreen" disabled="disabled" type="text" />
    </div>
    <input class="x-input select2-offscreen" tabindex="-1" name="Supplier" type="text" />   
</div> 
</div> 
<p>   
<a class="btn btn-link btn-copy-field x-copy-to-all" data-field="Supplier">Copy to all</a>  
</p>

我有许多具有不同名称的类似元素(名称是唯一的部分)。因此,我通过&#34; Name&#34;来搜索特定元素。包含,使用以下方法(其中&#39; fieldName&#39; ==&#39;供应商&#39;在当前示例中):

element = Driver.FindElements(By.CssSelector(".x-list-container [name*='" + fieldName + "']"))[index];
element2 = element.FindElements(By.ClassName("select2-chosen")).First();

但它找不到任何关于&#39; element2&#39;。 如何通过Name Contains搜索子元素,并获取整个父元素。

提前致谢

1 个答案:

答案 0 :(得分:0)

根据您提供的HTML来识别带有文本的元素,例如: 供应商,然后参考此节点查找带有某些文字的<span>节点,例如,您可以使用以下代码行:

element = Driver.FindElement(By.XPath("//input[@class='x-input select2-offscreen' and contains(@name,'" + fieldName + "')]//preceding::div[1]/a/span[@class='select2-chosen']"));