我是 Selenium 和 Java 新手,我正在尝试通过 CSS 选择器选择 nth
元素。
我想从下面的代码中获取所需的值并保存它们以供进一步使用。我已经成功使用了如下所示的 XPATH
//*[@class='search-result__advert' and not(@id)][i]
(i = 第 n 个元素)
我正在尝试练习通过 CSS 选择器获取值,我想出了这个(没有按预期工作)
.search-result__advert:not([id]):not([data-ad-show]):nth-child(i)
(我也尝试过 :nth -of-type(i)
)
我对 i=3
的期望:
选择没有 id 属性和 data-ad-show 属性的第三个元素,该值将为 Desired value 3。 p>
相反,我得到org.openqa.selenium.NoSuchElementException:无法定位元素:.search-result__advert:not([id]):not([data-ad-show]):nth-child(3 )
对于 i=1、i=2、i=5 效果很好。
<ul class="search-result list-unstyled">
<li class="search-result__advert">
<div class="grid grid--rev">
<p>Desired value 1</p>
</div>
</li>
<li class="search-result__advert">
<div class="grid grid--rev">
<p>Desired value 2</p>
</div>
</li>
<li class="search-result__advert" id="signUpWrapper">
<div id="signUpSavedSearch" class="grid">
<p>Advertisment 1</p>
</div>
</li>
<li class="search-result__advert hidden" data-ad-show="ad_list_middle">
<div class="ad" id="ad_list_middle">
<p>Advertisment 2</p>
</div>
</li>
<li class="search-result__advert">
<div class="grid grid--rev">
<p>Desired value 3</p>
</div>
</li>
<li class="search-result__advert">
<div class="grid grid--rev">
<p>etc. etc.</p>
</div>
</li>
</ul>
最佳答案
您可以只使用 CSS 选择器
ul.search-result div.grid--rev
这会过滤掉所有广告。现在,您可以使用代码来迭代列表,而不必依赖使用定位器进行迭代。
关于java - 如何通过CSS选择器从元素列表中正确选择第n个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67668505/