Транспортир дождаться полной загрузки страницы - PullRequest
0 голосов
/ 25 ноября 2018

Я пытаюсь нажать '0 - Bootstrapping' в Tutorial после перехода на https://docs.angularjs.org/tutorial,, но Protractor не ждет полной загрузки страницы, поэтому я получаю сообщение об ошибке

Сбой: невозможно прочитать свойство 'click' из неопределенного

Я пытался вручную дождаться загрузки страницы, используя

browser.driver.sleep (10000);

но я все еще получаю ту же ошибку.

conf.js

exports.config = {
// seleniumAddress: 'http://localhost:4444/wd/hub',
getPageTimeout : 12000000,
capabilities: {
    'browserName': 'chrome'
},
specs: ['todo-spec.js'],
jasmineNodeOpts: {
    showColors: true,
    defaultTimeoutInterval: 1440000,
}
};

todo-spec.js

describe('angularjs homepage', function () {
it('should greet the named user', function () {
    var dropdown = element.all(by.css('.dropdown')).first(),
        dropdownToggle = dropdown.element(by.css('.dropdown-toggle')),
        dropdownMenu = dropdown.element(by.css('.dropdown-menu')),
        menuItem = dropdownMenu.all(by.tagName('li')).first();

    browser.get('http://www.angularjs.org');
    dropdownToggle.click();
    menuItem.click();

    expect(browser.getCurrentUrl()).toEqual('https://docs.angularjs.org/tutorial');
    //waiting 10 seconds for the page to fully load
    browser.driver.sleep(10000);
    browser.waitForAngular();
});
it('', async function () {

    /*  tried waiting for the element to be present
    var EC = protractor.ExpectedConditions;
    var e = element.all(by.css('.nav-index-listing'))[0];
    browser.wait(EC.presenceOf(e), 10000);

    Failed: Cannot read property 'isPresent' of undefined
    */

    //clicking '0 - Bootstrapping' under Tutorial
    element.all(by.css('.nav-index-listing'))[0].click();
    expect(element(by.cssContainingText('.pln', 'npm install')).isEnabled()).toBe(true);
    // Failed: Cannot read property 'click' of undefined

});
});

Редактировать

Заменено

element.all(by.css('.nav-index-listing'))[0].click();
    expect(element(by.cssContainingText('.pln', 'npm install')).isEnabled()).toBe(true);

на

        element.all(by.css('.nav-index-listing')).get(0).click();
    browser.wait(protractor.ExpectedConditions.urlIs("https://docs.angularjs.org/tutorial/step_00"), 5000);
    expect(browser.getCurrentUrl()).toEqual('https://docs.angularjs.org/tutorial/step_00');
    expect(element(by.cssContainingText('.pln', 'npm install')).isEnabled()).toBe(true);

И получена ошибка

Ошибка: время ожидания истекло после 5001 мс

Если я удаляю browser.wait, я получаю

Ожидаемое 'https://docs.angularjs.org/tutorial' равным' https://docs.angularjs.org/tutorial/step_00'.

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Попробуйте использовать waitForAngualarEnabled(true) вместо ожидаемого ожидания, которое заставит транспортир ждать, пока все угловые элементы будут загружены, и добавьте await в каждую строку вашего теста.голос принят вниз

0 голосов
/ 25 ноября 2018

Прежде всего browser.driver.sleep(10000) не требуется.Для загрузки страницы вы можете использовать protractor.ExpectedConditions.Это уменьшит ненужное ожидание на 10 секунд, если страница уже загружена.

Во-вторых, в вашем коде есть небольшая ошибка, которая является основной причиной вашей проблемы.

Измените эту строку

element.all(by.css('.nav-index-listing'))[0].click();

На эту

 element.all(by.css('.nav-index-listing')).get(0).click();

ОБНОВЛЕНИЕ:

  1. element.all(by.css('.nav-index-listing')) даст вам только li элементов, которые пройдут тест.Но щелкнув по нему, вы не попадете на нужную страницу.
    Измените ее на:

    element.all(by.css('.nav-index-listing a')).get(0).click();  
    
  2. В этом случае [0] не будет работать, поскольку возвращаемое значениене массив.Это типа ElementArrayFinder.Так вот почему .get(0) требуется.

  3. Будет лучше, если вы также проверите для проверки следующие условия.

    browser.wait(EC.urlIs("https://docs.angularjs.org/tutorial/step_00"), 5000);    
    expect(browser.getCurrentUrl()).toEqual('https://docs.angularjs.org/tutorial/step_00');  
    

    В этих условиях проверяется, является ли ваш текущий URL-адрес https://docs.angularjs.org/tutorial/step_00 или нет.

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