org.openqa.selenium.InvalidSelectorException:无效的选择器SyntaxError:意外的令牌}通过Xelenet Java使用XPath

时间:2019-04-09 08:46:41

标签: java selenium selenium-webdriver xpath xpath-1.0

我正在尝试单击以下HTML中的最后一个span元素

<div class="rating rating-set js-ratingCalcSet" >
  <div class="rating-stars js-writeReviewStars"> 
    <span class="js-ratingIcon glyphicon glyphicon-star fh"></span>
    <span class="js-ratingIcon glyphicon glyphicon-star lh"></span>
     ...
    <span class="js-ratingIcon glyphicon glyphicon-star fh"></span>
    <span class="js-ratingIcon glyphicon glyphicon-star lh"></span>
  </div>
</div>

在Java中使用Selenium,并使用以下代码:

driver.findElement(By.xpath("(//div[contains(@class, 'js-writeReviewStars')]//span)[last()]")).click(); 

这将返回异常:

org.openqa.selenium.InvalidSelectorException: invalid selector: Unable to locate an element with the xpath expression (//div[contains(@class, 'js-writeReviewStars')]//span)[last()] because of the following error:
SyntaxError: Unexpected token }
  ...
*** Element info: {Using=xpath, value=(//div[contains(@class, 'js-writeReviewStars')]//span)[last()]}

我已经检查了xpath表达式的有效性,它看起来正确(使用https://www.freeformatter.com/xpath-tester.html),因为它找到了目标元素。

我尝试用括号将整个表达式括起来,但这没用。

1 个答案:

答案 0 :(得分:2)

您非常接近。要在last()标签内标识<span> <div>标签,您需要删除多余的 ( {{1} } 来自

因此,您需要有效地进行更改:

)

为:

driver.findElement(By.xpath("(//div[contains(@class, 'js-writeReviewStars')]//span)[last()]")).click();