Проблема с транспортиром: функция click () не работает - PullRequest
0 голосов
/ 19 октября 2019

У меня есть один senario, функция нажатия кнопки используется многими тестовыми примерами e2e для огурцов. Я могу получить текст кнопки. Но если щелкнуть его не перенаправить или загрузить какое-либо содержимое.

var next = element(by.cssClass('buttonclass'));
next.click();

Приведенный выше код не работает, но если я использую browser.executeScript("arguments[0].click();",next ), то щелчок работает. Я не могу изменить код, так как он используется несколькими тестовыми примерами .... В чем причина?

Ответы [ 3 ]

0 голосов
/ 21 октября 2019

При создании тестов очень важно найти / взаимодействовать только с «единственным» элементом на вашей странице.

Это означает, что вы должны найти элементы по локаторам: css, xpath .. и т. Д., И результат должен быть только " one ", если вы начинаете видеть " больше, чемодин найденный элемент будет использовать первый ..", это означает, что вам нужно переделать локатор.

Еще одна хорошая практика - использовать" условия ожидания ".

https://www.protractortest.org/#/api?view=ProtractorExpectedConditions

Перед щелчком убедитесь, что условие элемента выполнено: elementToBeClickable

Если у вас сложный веб-сайт, не всегда команды транспортира могут выполнить эту работу. В этом случае используйте javascript executor.

0 голосов
/ 21 октября 2019

ПОЧЕМУ это происходит

вероятно, элемент, на который вы ссылаетесь, является оберткой, например

<div id="id">
  text
  <button></button>
</div>

В этом случае, если вы нажмете div в пользовательском интерфейсе button получит щелчок, потому что он перекрывает кнопку. Когда вы делаете это с помощью транспортира, он щелкает именно тот элемент, который вы укажете. Таким образом, вы можете получить текст из div#id, но если вы нажмете, он скажет вам, что этот элемент не кликабелен. Этот тип сценария browser.executeScript("arguments[0].click();",next ) не заботится о макете страницы и будет щелкать по элементу, даже если этот элемент невидим в пользовательском интерфейсе

Решение

, на которое Вы ДОЛЖНЫуметь контролировать свои сценарии, если вы не можете изменить щелчок в одном месте, значит, ваш код недостаточно гибок, и вам нужно подумать, как его улучшить

0 голосов
/ 20 октября 2019

Попробуйте вместо этого

var next = element(by.css('buttonclass'));
...