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)
Другие вопросы по тегам