phantomjs, protractjs и.NET
У меня есть страница, которая отображается с использованием.NET и содержит код C# .net. Я тестирую это с помощью protractorjs, используя phantomjs GhostDriver. Тем не менее, у меня, кажется, возникают проблемы при загрузке страницы.
Если я запускаю этот тест
it('should redirect to login', function () {
targetUrl = 'http://localhost:52254/';
ptor = protractor.getInstance();
ptor.ignoreSychronization = true;
ptor.get(targetUrl);
ptor.wait(function () {
return ptor.driver.getCurrentUrl().then(function (url) {
return targetUrl = url;
}, 2000, 'It\'s taking to long to load ' + targetUrl + '!');
});
expect(ptor.driver.getCurrentUrl()).toBe('http://localhost:52254/');
}, 5000);
все хорошо, и я там, где я ожидаю
но если я запускаю тест ниже, который идентичен, кроме того, я ищу элемент на странице
it('should redirect to login', function () {
targetUrl = 'http://localhost:52254/';
ptor = protractor.getInstance();
ptor.ignoreSychronization = true;
ptor.get(targetUrl);
ptor.wait(function () {
return ptor.driver.getCurrentUrl().then(function (url) {
return targetUrl = url;
}, 2000, 'It\'s taking to long to load ' + targetUrl + '!');
});
ptor.driver.findElement(by.id('headerLoginBtn')).click().then(function () {
expect(ptor.driver.getCurrentUrl()).toBe('http://localhost:52254/Account/Login');
});
}, 5000);
Я получаю исключение, показанное ниже
UnknownError: Error Message => 'Element is not currently visible and may not be manipulated'
Тест работает нормально при запуске с драйвером chrome, но в phantomjs он не проходит. Я что-то здесь упускаю или это ограничение ia для phantomjs, что оно не будет работать с кодом.NET.
2 ответа
Иногда тесты в phantomjs терпят неудачу, потому что окно phantomjs (которое вы не видите) слишком маленькое, а транспортир (селен) "видит" только те элементы, которые видны (без необходимости прокрутки) на странице. Поэтому, когда phantomjs запускает относительно небольшое окно, некоторое содержимое и элементы, которые вы хотите использовать, не помещаются в видимой части.
В посте https://github.com/angular/protractor/issues/585 описано решение для установки разрешения экрана. С его помощью вы можете установить разрешение экрана для браузера (ов), который запускает транспортир. Я заметил, что phantomjs обычно требует немного больше места, чем Firefox и Chrome.
Также с помощью protractor-html-screenshot-reporter вы можете делать снимки экрана в момент, когда тест не пройден, чтобы вы могли увидеть, видим ли элемент самостоятельно. Это особенно полезно для phantomjs, потому что вы не можете остановить транспортир отладкой и посмотреть, в чем проблема.
Я согласен с @Andre Paap.
У меня была такая же проблема в фантоме с модульным тестированием Python.
Я решил, добавив следующую строку.
self.driver.set_window_size(1120, 550)