невозможно щелкнуть и выбрать значение из раскрывающегося списка всплывающего окна с помощью protractor.js

Я использую protractor.js. С помощью которого я могу войти в свое приложение. Но после немедленного входа в систему появится всплывающее окно, и мне нужно выбрать из него раскрывающееся значение. но с помощью protractor.js я не смог этого сделать. Код указан ниже.

  describe('angularjs homepage todo list', function() {
      it('should add a todo', function() {
          browser.ignoreSynchronization = true;
        browser.get('https://sample.com');

        //browser.waitForAngular();
        //browser.sleep(10000);
         browser.pause();
        element(by.id('userId')).sendKeys('[email protected]');
        browser.manage().timeouts().pageLoadTimeout(5000);
        element(by.id('password')).sendKeys('*********');
        browser.manage().timeouts().pageLoadTimeout(5000);
        **element(by.className('id-login-button wk-button-primary wk-button-full')).click();**
        //browser.manage().timeouts().pageLoadTimeout(5000);
         //browser.ignoreSynchronization = false;
         browser.sleep(20000);
        browser.switchTo().defaultContent();

         browser.wait( done => {  
         return element(by.model('productSelectionCtrl.selectedProduct')).isPresent();
         })
         .then(()=>{
         element(by.model('productSelectionCtrl.selectedProduct')).click();
         element(by.cssContainingText('option', 'Master Suite')).click();
         browser.sleep(20000);

         done;
         });

      });

    });

Мой код работает до строки, выделенной жирным шрифтом. После этого я взял имя класса всплывающего окна, которое нужно щелкнуть, и мне нужно было выбрать значение «Основной набор» из раскрывающегося списка, в котором есть ng-model (productSelectionCtrl.selectedProduct). Но этого не делается. Не могли бы вы помочь мне с этим?

Я даже пытался использовать (browser.ignoreSynchronization = false;), так как моя домашняя страница является угловой, но безуспешно. Пожалуйста, помогите мне выбрать значение из этого выпадающего списка. Возможно, проблема связана с ожиданием или тайм-аутом. Ошибка, которую я получаю в консоли, упоминается ниже.

Failures:
1) angularjs homepage todo list should add a todo
  Message:
    Error: Timeout - Async callback was not invoked within timeout specified by
jasmine.DEFAULT_TIMEOUT_INTERVAL.
  Stack:
    Error: Timeout - Async callback was not invoked within timeout specified by
jasmine.DEFAULT_TIMEOUT_INTERVAL.
        at tryOnTimeout (timers.js:232:11)
        at Timer.listOnTimeout (timers.js:202:5)

1 spec, 1 failure
Finished in 36.928 seconds

[18:20:14] I/launcher - 0 instance(s) of WebDriver still running
[18:20:14] I/launcher - chrome #01 failed 1 test(s)
[18:20:14] I/launcher - overall: 1 failed spec(s)
[18:20:14] E/launcher - Process exited with error code 1

person johny    schedule 03.05.2017    source источник


Ответы (1)


by.className ожидает одно имя класса. Если вы хотите использовать несколько классов, используйте локатор CSS-селектор:

$('.id-login-button.wk-button-primary.wk-button-full').click();

Обратите внимание, что если бы вы использовали ESLint и eslint-plugin-protractor плагин (абсолютно бессовестная самореклама), вы могли бы поймать эту ошибку намного раньше - есть соответствующий no-compound-classes.

В качестве примечания старайтесь избегать использования browser.sleep() и вместо этого используйте browser.wait() и набор встроенных Ожидаемые условия .

person alecxe    schedule 03.05.2017
comment
Строка $('.id-login-button.wk-button-primary.wk-button-full').click(); работал, который является элементом для кнопки входа в систему. Код после этого не работает. Имя модели ng для всплывающего окна — productSelectionCtrl.selectedProduct, а код после этого — для раскрывающегося списка. - person johny; 03.05.2017
comment
@johny, пожалуйста, постарайтесь не решать несколько дополнительных задач в одной и той же теме. Вместо этого, если вы считаете, что мы решили вашу текущую проблему, примите ответ (зеленый флажок слева). Если у вас есть какие-либо последующие вопросы, рассмотрите возможность создания отдельной темы. Спасибо. - person alecxe; 03.05.2017
comment
это не последующая проблема. В самом основном вопросе я упомянул, что мой код работает до строки, выделенной жирным шрифтом. После этого я взял имя класса всплывающего окна, которое нужно щелкнуть, и мне нужно было выбрать значение Master Suite из раскрывающегося списка, в котором есть ng-model (productSelectionCtrl.selectedProduct). Но этого не делается. Не могли бы вы помочь мне с этим? И жирная строка кода — это нажатие кнопки входа в систему, которая уже работает. Пожалуйста, помогите мне с этим. - person johny; 04.05.2017