В чем разница между элементом (by.id ('username')) и browser.driver.findElement (by.id ('username')) при использовании транспортира - PullRequest
0 голосов
/ 30 января 2019

Интересно, какова разница между

element(by.id('userId')).sendKeys('abc');

и

browser.driver.findElement(by.id('userId')).sendKeys('abc');

при использовании транспортира.

У меня есть сайт, разработанный в угловых 6 и при написанииВ некоторых тестах пользовательского интерфейса с использованием транспортира мне было трудно понять, что первый вообще не работает для меня.Я должен был использовать позже, чтобы заставить это работать, и только после того, как потратив пару часов, я понял это.

Просто интересно, какова разница, поскольку я предполагал, что element(by..) должен использоваться в угловых значениях, и примеры, приведенные на официальном сайте транспортира, также, похоже, используют первый вариант.

ВКроме того, при использовании browser.driver, хотя я могу найти элементы, но он не ждет завершения операции.Ниже код не работает после нажатия кнопки Login.Просто интересно, что может быть правильным подходом здесь.

it('should login', function() {
      browser.get('http://localhost:4200');
      browser.driver.findElement(by.id('userId')).sendKeys('abc');
      browser.driver.findElement(by.id('password')).sendKeys('123');
      browser.driver.findElement(by.id('login-button')).click();
      browser.driver.findElement(by.xpath('//span[text()=\'Maintenance\']')).click();
}

Ответы [ 3 ]

0 голосов
/ 30 января 2019

Простое объяснение:

element(by.id('userId')).sendKeys('abc') -> Используется при автоматизации углового применения с помощью транспортира.

browser.driver.findElement(by.id('userId')).sendKeys('abc'); -> Используется приавтоматизация неугловой страницы с помощью транспортира.

Надеюсь, это поможет вам ..

Решение

 browser.waitForAngularEnabled(true);
 browser.get('http://localhost:4200');
 element(by.id('userId')).sendKeys('abc');
 element(by.id('password')).sendKeys('123');
 element(by.id('login-button')).click();
 element(by.xpath('//span[text()=\'Maintenance\']')).click();

Если вы столкнулись с проблемой ожидания.Попробуйте добавить ожидаемое условие ожидания.См. https://www.protractortest.org/#/api?view=ProtractorExpectedConditions

0 голосов
/ 30 января 2019

Попробуйте использовать приведенный ниже фрагмент;

browser.wait(function() {
       return element(by.id('userId')).isDisplayed();
    }, 5000);
   element(by.id('userId')).click();.sendKeys() 

И, пожалуйста, проверьте, работают ли какие-либо функции из API-интерфейсов Jasmine в вашем коде.Команды API Jasmine должны работать для любого углового js-приложения.Итак, проверьте, работают ли вышеуказанные команды, когда вы добавляете browser.ignoreSynchronization = true после browser.get () command

Это также может быть проблемой, если вашЖасмин, вебдрайвер не обновляется

Удачи !!

0 голосов
/ 30 января 2019

Первый: element(by.id('userId')).sendKeys('abc') - это API-интерфейс транспортира, а browser.driver.findElement(by.id('userId')).sendKeys('abc'); - команда драйвера селена.

Транспортир заключил в себе команды драйвера селена, чтобы предоставить собственный API.API, предоставляемые транспортиром, ожидают завершения любых асинхронных операций в вашем угловом приложении (например, «таймеры», «запросы https»), прежде чем переходить к следующим инструкциям в очереди.С другой стороны, команды драйвера не будут ждать завершения асинхронных операций.

Если первый не работает в вашем случае, то проверьте, есть ли в вашем приложении запущенные таймеры.

Способ использования таймеров в угловых условиях:

 this.ngZone.runOutsideAngular(() => {
  setTimeout(() => {
    // Changes here will not propagate into your view.
    this.ngZone.run(() => {
      // Run inside the ngZone to trigger change detection.
    });
  }, REALLY_LONG_DELAY);
});

https://www.protractortest.org/#/timeouts

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...