Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Смена текста в AngularJS приложении если запускается через WebDriver

protractorjs
angularjs
webdriver
javascript
Теги: #<Tag:0x00007f7b6996f4b0> #<Tag:0x00007f7b6996ef38> #<Tag:0x00007f7b6996eba0> #<Tag:0x00007f7b6996e7b8>

(Valery Fludkov) #1

Имеется приложение, написанное на AngularJS. Когда заходишь сам, весь текст отображается нормально: My Profile, Sign Out. Если же сайт открыт через вебдрайвер или RC, то весь текст отображён в таком виде: myProfile, signOut (смотри скриншот)

если сам зашёл в приложение, то локатор такой:

<a class="md-button ng-binding md-ink-ripple md-menu-theme" ng-transclude="" ng-bind="'signOut' | translate" ui-sref="app.ext.login" href="#/app/ext/login">
    Sign Out
    <div class="md-ripple-container" style=""></div>
</a>

если же в приложение зашёл под Selenium RC или WebDriver, то локатор такой:

<a class="md-button ng-binding md-ink-ripple md-menu-theme" ng-transclude="" ng-bind="'signOut' | translate" ui-sref="app.ext.login" href="#/app/ext/login">
    signOut
    <div class="md-ripple-container" style=""></div>
</a>

Из-за чего может быть такая разница? Есть ли какие-нибудь настройки в вебдрайвере чтобы приложение запускалось с нормальным текстом?


(Stan) #2

Надо спросить у разработчиков вашего приложения, какая логика это делает.
В дополнение какие браузеры вы используете, как “заходите через webdriver” и тд?


(Valery Fludkov) #3

У разработчиков не спросить, менеджмент пока запрещает по непонятным причинам, надо самому как-то разбираться.

Firefox 43.0.4
Chrome 47.0.2526.111 m
selenium version: 2.49.1


(Stan) #4

так, а в обычном файрфоксе и хроме в обоих случаях - все ок? Распишите подробно в каком браузере что не так. У меня складывается впечатление, что у вас просто в одном из браузеров либо логика другая. либо это вообше теплейты какие-то не подгружают строки, а просто плейсзолдеры под них (уверен на 143%).


(Valery Fludkov) #5

Тут понятно, что у этих элементов страницы есть атрибут ngBind.

The ngBind attribute tells Angular to replace the text content of the specified HTML element with the value of a given expression, and to update the text content when the value of that expression changes

Как сделать, чтобы ngBind нормально отрабатывал, если запущен автотест - не ясно.

UPDATE:
в обычном файрфоксе и хроме в обоих случаях ок. Это если я руками в приложение захожу. С теми же браузерами через селениум, происходит такая замена текста.


(Борис Осипов) #6

А в Incognito режиме хрома также?


(Valery Fludkov) #7

под инкогнито режимом проблема воспроизводится, строки также не подгружаются.
Есть ли способ запустить вебдрайвер в нормальном режиме, не инкогнито?


(Борис Осипов) #8

Для firefox’а вы можете воспользоваться заранее сохраненным профилем. Гуглиться по словам “use firefox profile selenium webdriver”
Для хрома также наверно можно. Но это все костыли:grinning:
. Нужно разобраться в чем разница при работе вашего приложения при обычной работе хрома и в режиме инкогнито.
P.S. впервые такое вижу.:grinning:


(Stan) #9

Вот тут ка краз и начинается магия, которую я попросил вверху - покажите как вы его запускаете, что делает тест. По тому что явижу, если у вас в инкогнито моде воспроихводится - это бага приложения и клиент тоже увидит плейсхолдеры вместо нормального текста (возможно не хватает какой-то куки или сессии, которая ставится после хаода в приложение).


(Dmitriy Zverev) #10

Мы тут тоже немного погадали на кофейной гуще.
Текст справа похож на названия переменных. Возможно, в режиме инкогнито браузер не отправляет локаль и текст отображается as is.


(Stan) #11

Так я выше про это и сказал, не возможно, а точно. Только вот “локаль” указана в user-agent. И нет ничего такого, что браузер не отправляет в инкогнито, а отправляет в обычном моде. Так что это в любом случае какие-то ресурсы - сессия, куки, что угодно.

Но вообще да, не увидев сайта или его кода, мы вряд ли что-то узнаем.


(Oleksandr Khotemskyi) #12

Вы используете ProtractorJS или что-то другое?
Просто сам ProtractorJS делает кое какие манипуляции со страницей, возможно в этом проблема.

Кстати какая версия ангуляра используется? 1.х или уже 2?