我在点击一个按钮时遇到了麻烦,这个按钮有一个长的、生成的类,而这个类在使用xpath选择器时不是唯一的。它有两个嵌套元素-svg和span。我不确定我是否应该使用它们来查找这个按钮,或者可能按类查找并选择第二个选项。
我尝试了以下选择器:
xpath = "//button[contains(@class, 'styled_ShareButton')](1)"
xpath = "//button span[contains('Add to favorites')]"
xpath = "//button[contains(@span, 'fa-heart')]"
xpath = "//svg[contains(@class, 'fa-heart')]"
但都没用。
这是我感兴趣的按钮(这是同一类的两个按钮中的第二个)
<button class="styled__ShareButton-sc-1jdjzg3-3 feqRzW Button-sc-1emfup8-0 kFlIhg">
<svg aria-hidden="true" data-prefix="far" data-icon="heart" class="svg-inline--fa fa-heart fa-w-16 " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor"></path></svg>
<span>Add to favourites</span>
</button>
有人能告诉我怎么点击它或者指出我在以前的选择器中犯的错误吗?谢谢。
4条答案
按热度按时间vqlkdk9b1#
您可以尝试以下XPath:
或
或
或
或
或
mkh04yzy2#
浏览器建议的默认xpath有效:
但如果有人有更好的解决方案,我还是会很感激的。
j8ag8udp3#
这似乎是一个完美的数据属性用例。
该属性可用于唯一标识测试中的按钮,并且对ui结构中的更改更有弹性。
kcrjzv8t4#
所需的元素是一个动态元素,因此要定位该元素,您必须诱导webdriverwait使该元素可单击,并且您可以使用以下任一解决方案:
cssSelector
:new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//button[@class]//span[text()='Add to favourites']"))).click();