Подождите, пока страница, содержащая элемент, работает, но не должна содержать элемент

#robotframework #selenium2library

#robotframework #selenium2library

Вопрос:

Пытаюсь проверить, содержит ли элемент определенный текст, но ключевое слово Element Should Contain не находит текст, даже если я явно указываю в атрибуте xpath, что он содержит текст. Однако ключевое слово Wait Until Page Contains Element работает.

Запустил приведенный ниже скрипт и получил следующие результаты

 #this was successful
Wait until Page Contains Element  xpath://div[@id="header"]//span[contains(text(), "text")]  

#this resulted to: should have contained text 'text' but its text was ''
Element Should Contain  xpath://div[@id="header"]//span[contains(text(), "text")]  text  
  

Комментарии:

1. Содержит ли этот элемент ровно текст из четырех символов или в нем содержится больше информации, чем это?

2. Элемент действительно содержит больше символов, таких как «это текст». Но это не должно иметь значения, верно? Поскольку Element Should Contain , насколько я понимаю, проверяет только то, что элемент содержит текст, а не проверяет, точно ли это текст.

3. @E.Как.P. Согласно документам SeleniumLibrary: «Используйте ‘Текст элемента должен быть’, если вы хотите соответствовать точному тексту, а не подстроке.», вы правы.

Ответ №1:

Есть разница между Element Should Contain и Wait until Page Contains Element .

Первый будет проверять только, содержит ли в данный момент DOM элемент с подстрокой этого текста, в то время как последний будет ждать (по умолчанию) до 5 секунд появления этого элемента в DOM, чтобы проверить, существует ли он. Или, перефразируя: первый проверяет правильность условия, другой прослушивает изменения в DOM, чтобы определить необходимое значение. Возможно, ваш текст отображается через некоторое время загрузки?

Из документации:

Element Should Contain :

Проверяет, что указатель элементов содержит ожидаемый текст. … Используйте текст элемента, если вы хотите соответствовать точному тексту, а не подстроке.

Wait Until Page Contains Element :

Ожидает, пока на текущей странице не появится указатель элемента. Сбой, если время ожидания истекает до появления элемента.

Комментарии:

1. Привет, ты прав. На самом деле я пытаюсь проверить текст во всплывающей подсказке, которая появляется после того, как я наведу курсор мыши. Итак, что я сделал, так это выполнил Mouse Over , Wait Until Page Contains Element затем Element Should Contain .

Ответ №2:

Удалось решить эту проблему. Сценарий был фактически правильным, единственная проблема заключалась в том, что был аналогичный xpath, который также появляется всякий раз, когда я выполняю «Наведение курсора мыши» (что я делаю, потому что я пытался проверить всплывающую подсказку). Таким образом, результатом было возвращение 2 элементов, которые платформа robot не может проверить, если они не различаются.

Спасибо всем за вклад.

Ответ №3:

При попытке проверить текст, если он правильный, вы можете сделать что-то вроде этого:

 Run Keyword And Continue On Failure    Element Text Should Be   XPATH    TEXT
  

Вы также можете оставить первую часть, если хотите, чтобы тест был остановлен, если текст не в порядке.

 Element Text Should Be   XPATH    TEXT