2016-12-15 1 views
1

Я пытаюсь понять, как сделать этот базовый тест пройденным.Балансировка основного блока проталкивания. Запуск теста после входа в систему

describe('home page', function() { 

    beforeEach(function() { 
     browser.driver.get('https://localhost:0000/xxxx/'); 
    }); 

    it('should have a title', function() { 
     var userName = browser.driver.findElement(by.id('userid_inputtext')).sendKeys('userNameXX'); 
     var passWord = browser.driver.findElement(By.id("password_inputtext")).sendKeys("passWordXX"); 
     var login = browser.driver.findElement(By.id('sign_in_button')); 

     login.click(); 

     browser.driver.getCurrentUrl(); 
     browser.driver.getTitle().then(function (title) { 
      expect(title).toEqual('Webpage Title'); 
     }); 
    }); 

}); 

Адрес для входа на страницу не является угловым, но после регистрации он загружает приложение с угловыми углами. Сейчас мой тест проходит некоторое время. Проблема в том, что иногда она берет название страницы входа в систему, и иногда она забирает заголовок домашней страницы (я хочу, чтобы она последовательно тестировала заголовок домашней страницы после входа в систему).

Я играю с помощью обещания и браузера. Подождите немного, но на самом деле это не прибило. Любой совет будет полезен!

+0

Возможно ли использовать метод '.click()'? –

+0

Это, но он по-прежнему захватывает название страницы входа, когда я помещаю код ниже 'login.click()' внутри. –

ответ

2

Несколько вещей, о которых я мог думать - большинство методов в API-интерфейсе транспортира являются асинхронными и возвращают обещания.

В вашей странице входа в системе, как только вы login.click(), ваша домашняя страница занимает некоторое время, чтобы загрузить и поэтому следующие методы асинхронных как - browser.getCurrentUrl & browser.getTitle называют первым. Это происходит непоследовательно, как вы указали.

Также вы должны назначить переменные для локаторов элементов, а затем выполнить действия над ними! Вы должны использовать объекты страницы для хранения ваших локаторов. Пожалуйста, обратитесь к Official Protractor Style Guide

browser.getCurrentUrl также возвращает обещание, которое вы также должны решить.

Чтобы решить эту проблему, вы должны использовать browser.wait в правильном направлении:

describe('home page', function() { 

beforeEach(function() { 
    browser.driver.get('https://localhost:0000/xxxx/'); 
}); 

it('should have a title', function() { 
    var userName = browser.driver.findElement(by.id('userid_inputtext')); 
    userName.clear(); 
    userName.sendKeys('userNameXX'); 

    var passWord = browser.driver.findElement(By.id("password_inputtext")); 
    passWord.clear(); 
    passWord.sendKeys("passWordXX"); 

    var login = browser.driver.findElement(By.id('sign_in_button')); 

    browser.driver.wait(login.click(),5000,'homePage should be loaded within 5 secs'); // would throw an error if the page takes more than 5 secs to load 

// you could also use `browser.driver.sleep(500)` but not advisable as sleeps slow the tests down! 

    browser.driver.getCurrentUrl().then(function (url) { 
     expect(url).toEqual('homePage url'); 
    }); 
    browser.driver.getTitle().then(function (title) { 
     expect(title).toEqual('Webpage Title'); 
    }); 
}); 

}); 

Кроме того, поскольку ваша страница Логина не является угловой, вы могли бы написать тест на правильном пути, который должен использовать browser.ignoreSynchronization и используя методы транспортировщика api более чистым способом.

describe('home page', function() { 

beforeEach(function() { 
    browser.get('https://localhost:0000/xxxx/'); 
}); 

it('should have a title', function() { 
    browser.ignoreSynchronization = true; // set it to true for non-angular pages(loginPage) 
    var userName = element(by.id('userid_inputtext')); 
    userName.clear(); 
    userName.sendKeys('userNameXX'); 

    var passWord = element(By.id("password_inputtext")); 
    passWord.clear(); 
    passWord.sendKeys("passWordXX"); 

    var login = element(By.id('sign_in_button')); 

    browser.wait(login.click(),5000,'homePage should be loaded within 5 secs'); 
    browser.ignoreSynchronization = false; // set it to false for angular pages(homePage) 

    browser.getCurrentUrl().then(function (url) { 
     expect(url).toEqual('homePage url'); 
    }); 
    browser.getTitle().then(function (title) { 
     expect(title).toEqual('Webpage Title'); 
    }); 
}); 

}); 

Уведомление нет необходимости доступа к browser.driver объекта, вы можете напрямую использовать методы транспортир в!

+0

Несомненно 'browser.wait()' принимает функцию как первый аргумент, поэтому 'browser.wait (login.click, 5000)' или, возможно, 'browser.wait (login.click.bind (login), 5000)'. –

+0

То, что действительно давало мне непоследовательные результаты, было анимацией, которая загружается после ввода имени/имени пользователя на страницу входа в систему. –

Смежные вопросы