org.openqa.selenium.InvalidSelectorException: неверный селектор SyntaxError: неожиданный токен} с использованием XPath через Selenium Java - PullRequest
1 голос
/ 09 апреля 2019

Я пытаюсь щелкнуть последний элемент span в следующем HTML

<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>

, используя Selenium в Java, со следующим кодом:

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 Ответ

2 голосов
/ 09 апреля 2019

Вы были довольно близко.Чтобы идентифицировать тег last() <span> в теге <div>, необходимо удалить дополнительную пару ( и ) из .

Так эффективно вам нужно изменить:

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

As:

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