我有一个关于在父元素中选择子元素的问题,而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搜索子元素,并获取整个父元素。
提前致谢
答案 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']"));