Xpath в Fitnesse с плагином BrowserTest Slim не работает с ul li

Я пытался получить первое сообщение об ошибке из следующего HTML-кода в тесте Fitnesse, используя BrowserTest Тонкий прибор.

<div class="validation-errors">
  <ul>
    <li>Enter your code.</li>
    <li>Enter your username.</li>
    <li>Enter your password.</li>
  </ul>
</div>

Я пробовал следующий Xpath:

//div[@class='validation-errors']/ul/li[1]/text()
//div[@class='validation-errors']/ul/li[1]
//div[@class='validation-errors']/ul/li

Первый xpath возвращает [null], тогда как второй и третий возвращают [0].

Ожидаемый результат: Enter your code.

Если я полностью уберу ли

//div[@class='validation-errors']/ul

затем он возвращается

[Enter your code.
Enter your username.
Enter your password.]

Так что в любом случае мой тест не проходит там, где он ищет только первое сообщение об ошибке. Я попробовал запрос xpath на онлайн-тестерах Xpath, где он, кажется, работает так, как ожидалось.

Вот пример фитнес-теста:

|table template|try to login                                      |
|open          |https://my.url.com/login?                             |
|enter         |@{code}    |as             |Code                      |
|enter         |@{username}|as             |Username                  |
|enter         |@{password}|as             |Password                  |
|click         |Login                                                 |
|$message=|value of                   |xpath=//div[@class='validation-errors']/ul/li[1]|



|storyboard|browser test|


|try to login                                                                        |
|code        |username           |password            |message?                          |
|            |                   |                    |Enter your code.                  |

Может быть, я упускаю что-то очевидное, но, безуспешно пытаясь понять это в течение нескольких часов, я решил опубликовать это здесь на случай, если у кого-то будет аналогичный опыт или я могу предоставить решение для получения значения первого <li> из трех .


person s-rod    schedule 15.12.2015    source источник


Ответы (2)


К сожалению, все элементы <li> получают неявный атрибут value в HTML, и это то, что возвращал value of BrowserTest до версии 2.5.1. Таким образом, ваши второй и третий XPath абсолютно верны для выбора искомого элемента. Возвращаемое значение, к сожалению, не то, что вы ожидаете/хотите. Если вы попробуете их снова с версией 2.5.1, они должны работать.


Задний план

value of изначально был разработан для возврата значения входных элементов (которое находится в их атрибуте «значение») и имеет резервное поведение, поэтому, если найденный элемент имеет атрибут «значение», возвращается его text(). В большинстве случаев это работает довольно хорошо, но является проблемой для <li>, у которого есть атрибут value, даже если его нет в исходном коде страницы. До версии 2.5.1 в BrowserTest не было метода, позволяющего получить текст файла <li>.

person Fried Hoeben    schedule 23.12.2015
comment
Спасибо @FriedHoeben. Только что увидел ваш комментарий .. Отлично :-) - person s-rod; 11.02.2016

Попробуйте один из них — длинный, проходящий через id и все уровни, или короткий, проходящий напрямую:

xpath=//div[@class="validation-errors"]/ul/li[text()="Enter your code."]

xpath=//li[text()="Enter your code."]
person Newcomer    schedule 17.12.2015
comment
Спасибо, Пирре, к сожалению, это тоже не работает. Я уверен, что пробовал это, но, поскольку вы упомянули, что это снова началось. Возвращает [0] expected [Enter your code.] - person s-rod; 18.12.2015
comment
@s-rod я отредактировал ответ - попробуйте еще раз. Может быть, вы неправильно объявляете свой xpath? Я не знаю синтаксиса вашей IDE, но эти селекторы xpath работают в Firebug-Mozilla и Devtools-Chrome в вашем HTML. Но похоже, что это работает, потому что, как вы сказали, оно вернуло: [0] ожидаемо [Введите код.] - person Newcomer; 18.12.2015
comment
Как я упоминал в своем первоначальном вопросе, xpath не был неверным, поскольку он работал правильно и возвращал ожидаемое значение в нескольких онлайн-тестерах xpath, на которых я пробовал его, включая те, которые вы предложили ранее. Но то же самое при копировании и вставке на мою вики-страницу Fitnesse не произошло. - person s-rod; 21.12.2015
comment
В любом случае, мне удалось обойти эту проблему, проигнорировав <li> в xpath, то есть //div[@class='validation-errors']/ul, который дал мне список всех/любых сообщений об ошибках (если применимо). Затем вместо того, чтобы утверждать против первой ошибки в списке, я утверждаю против всех сообщений, что, вероятно, является правильным подходом, потому что это то, что является тестом, получаем ли мы все ожидаемое сообщение или сообщения проверки. - person s-rod; 21.12.2015
comment
@s-rod Таким образом, вы только что получили все ошибки, но я понял, что вам нужна только одна - первая, но играйте, рад, что вы решили свою проблему. - person Newcomer; 21.12.2015
comment
Спасибо @pirre за ваше время и усилия. Да, я думаю, хотя я не получил точного ответа на свой первоначальный вопрос, теперь у меня есть лучший тестовый сценарий, охватывающий все возможные комбинации сообщений. - person s-rod; 21.12.2015
comment
@s-rod хорошо, надеюсь, мой ответ помог вам. - person Newcomer; 21.12.2015