Selenium: выражение не является допустимым выражением/Xpath

Я играю с сервером Behat и Selenium. Я пытаюсь настроить таргетинг на определенный тег на основе его положения в документе.

Я использую AquaPath, графический интерфейс для работы с XPath, и он отлично работает. Моя проблема в том, что когда я пробую то же выражение в Behat/Selenium, у меня появляется сообщение об ошибке «Выражение не является допустимым выражением».

Вот мой XPath:

(//label)[5]/@for

Я ищу атрибут «для» пятого элемента метки, имеющего этот атрибут. Кажется простым, но не работает, и я действительно не знаю, почему...

Вот полный журнал (обратите внимание, //html добавляется автоматически):

The given selector //html//(label)[1] is either invalid or does not result in a WebElement. The following error occurred:
[InvalidSelectorError] Unable to locate an element with the xpath expression //html//(label)[1] because of the following error:
[Exception... "The expression is not a legal expression."  code: "51" nsresult: "0x805b0033 (NS_ERROR_DOM_INVALID_EXPRESSION_ERR)"  location: "file:///var/folders/66/bv_nvdt97f33pm2qn78v_8qc0000gn/T/anonymous5419845357799771264webdriver-profile/extensions/[email protected]/components/driver_component.js Line: 2621"]
Command duration or timeout: 6 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/invalid_selector_exception.html
Build info: version: '2.23.1', revision: '17143', time: '2012-06-08 18:59:04'
System info: os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.7.4', java.version: '1.6.0_33'
Driver info: driver.version: EventFiringWebDriver
Session ID: c3bdf2e6-5042-ac4a-95c5-4735f4318899

Есть идеи ?

Вот HTML (метки не всегда на одной глубине):

<!DOCTYPE html>
<html>
  <head></head>
  <body>
    <form action="" method="get" accept-charset="utf-8">
      <label for="label1"></label>
      <label for="label2"></label>
      <div>
        <label for="label3"></label>        
      </div>
      <fieldset>
        <div>
          <label for="label4"></label>
        </div>        
      </fieldset>
      <label for="label5"></label>
      <label for="label6"></label>
      <label for="label7"></label>
      <label for="label8"></label>
      <label for="label9"></label>
      <p><input type="submit" value="Continue &rarr;"></p>
    </form>
  </body>
</html>

person tvial    schedule 28.06.2012    source источник
comment
можете ли вы предоставить html, который вы пытаетесь сопоставить?   -  person Johnny Everson    schedule 28.06.2012
comment
Сделано при редактировании моего поста. Спасибо.   -  person tvial    schedule 28.06.2012


Ответы (2)


попробуйте (//fieldset/label)[5]/@for вместо (//fieldset//label)[5]/@for

person Johnny Everson    schedule 28.06.2012
comment
Дан селектор: $this->getSession()->getPage()->find('xpath', (//fieldset//label)[.$labelHash['position'].]/@for); - person tvial; 28.06.2012

Я считаю, что метод "find()" с селектором "xpath" не может получить атрибут, только элемент. Получение атрибута должно быть сделано через "getAttribute()".

person tvial    schedule 29.06.2012