如何使用动态生成的id选择列表项 - Selenium test Python

时间:2016-09-27 11:27:44

标签: python selenium selenium-webdriver

我在这里遇到问题,我无法找到列表项。

<ul id="select2-id_faculty_advisor-results" class="select2-results__options" role="tree" aria-multiselectable="true" aria-expanded="true" aria-hidden="false">
    <li id="select2-id_faculty_advisor-result-0pu4-1" class="select2-results__option select2-results__option--highlighted" role="treeitem" aria-selected="true">Alice</li>
    <li id="select2-id_faculty_advisor-result-cayw-2" class="select2-results__option" role="treeitem" aria-selected="false">Bob</li>
    <li id="select2-id_faculty_advisor-result-4h8e-3" class="select2-results__option" role="treeitem" aria-selected="false">Candy</li>
    <li id="select2-id_faculty_advisor-result-el4l-4" class="select2-results__option" role="treeitem" aria-selected="false">Dark</li>
</ul>

如上所示,我将无法通过id找到元素,因为其间的字符是动态生成的。有关如何定位特定元素的任何想法吗?

2 个答案:

答案 0 :(得分:0)

使用在css选择器中没有改变的id部分,如:
 li[id*='faculty_advisor-result']

如果需要,您还可以添加额外的属性,例如aria-selected,如:  li[id*='faculty_advisor-result'][aria-selected='false']或任何其他属性。

如果您没有特定选项的任何特定属性,则可以使用xpath选择具有该选项的元素,如:
 //li[contains(@id, 'faculty_advisor-result')][text()='Alice'] 与添加额外过滤器以缩小[@role='tree']

等结果的方法相同

答案 1 :(得分:0)

最好的方法是通过xpath收集列表“// ul [@ id ='select2-id_faculty_advisor-results'] / li”

之后,您可以从集合中按索引选择它们。